コード例 #1
0
        public async Task <IActionResult> Edit(int id)
        {
            ViewData["Title"] = "Modifica lezione";
            LessonEditInputModel inputModel = await lessonService.GetLessonForEditingAsync(id);

            return(View(inputModel));
        }
コード例 #2
0
        public async Task <LessonDetailViewModel> EditLessonAsync(LessonEditInputModel inputModel)
        {
            Lesson lesson = await dbContext.Lessons.FindAsync(inputModel.Id);

            if (lesson == null)
            {
                throw new LessonNotFoundException(inputModel.Id);
            }

            lesson.ChangeTitle(inputModel.Title);
            lesson.ChangeDescription(inputModel.Description);
            lesson.ChangeDuration(inputModel.Duration);
            lesson.ChangeOrder(inputModel.Order);
            dbContext.Entry(lesson).Property(lesson => lesson.RowVersion).OriginalValue = inputModel.RowVersion;

            try
            {
                await dbContext.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                throw new OptimisticConcurrencyException();
            }

            return(LessonDetailViewModel.FromEntity(lesson));
        }
コード例 #3
0
        public async Task <LessonDetailViewModel> EditLessonAsync(LessonEditInputModel inputModel)
        {
            LessonDetailViewModel viewModel = await lessonService.EditLessonAsync(inputModel);

            memoryCache.Remove($"Course{viewModel.CourseId}");
            memoryCache.Remove($"Lesson{viewModel.Id}");
            return(viewModel);
        }
コード例 #4
0
        public async Task <LessonEditInputModel> GetLessonForEditingAsync(int id)
        {
            IQueryable <LessonEditInputModel> queryLinq = dbContext.Lessons
                                                          .AsNoTracking()
                                                          .Where(lesson => lesson.Id == id)
                                                          .Select(lesson => LessonEditInputModel.FromEntity(lesson)); //Usando metodi statici come FromEntity, la query potrebbe essere inefficiente. Mantenere il mapping nella lambda oppure usare un extension method personalizzato

            LessonEditInputModel inputModel = await queryLinq.FirstOrDefaultAsync();

            if (inputModel == null)
            {
                logger.LogWarning("Lesson {id} not found", id);
                throw new LessonNotFoundException(id);
            }

            return(inputModel);
        }
コード例 #5
0
        public async Task <LessonEditInputModel> GetLessonForEditingAsync(int id)
        {
            FormattableString query = $@"SELECT Id, CourseId, Title, Description, Duration, RowVersion, [Order] FROM Lessons WHERE ID={id}";

            DataSet dataSet = await db.QueryAsync(query);

            //Course
            var lessonTable = dataSet.Tables[0];

            if (lessonTable.Rows.Count != 1)
            {
                logger.LogWarning("Lesson {id} not found", id);
                throw new LessonNotFoundException(id);
            }
            var lessonRow            = lessonTable.Rows[0];
            var lessonEditInputModel = LessonEditInputModel.FromDataRow(lessonRow);

            return(lessonEditInputModel);
        }
コード例 #6
0
        public async Task <IActionResult> Edit(LessonEditInputModel inputModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    LessonDetailViewModel viewModel = await lessonService.EditLessonAsync(inputModel);

                    TempData["ConfirmationMessage"] = "I dati sono stati salvati con successo";
                    return(RedirectToAction(nameof(Detail), new { id = viewModel.Id }));
                }
                catch (OptimisticConcurrencyException)
                {
                    ModelState.AddModelError("", "Spiacenti, il salvataggio non è andato a buon fine perché nel frattempo un altro utente ha aggiornato la lezione. Ti preghiamo di aggiornare la pagina e ripetere le modifiche.");
                }
            }

            ViewData["Title"] = "Modifica lezione";
            return(View(inputModel));
        }
コード例 #7
0
        public async Task <LessonDetailViewModel> EditLessonAsync(LessonEditInputModel inputModel)
        {
            int affectedRows = await db.CommandAsync($"UPDATE Lessons SET Title={inputModel.Title}, Description={inputModel.Description}, Duration={inputModel.Duration:HH':'mm':'ss}, [Order]={inputModel.Order} WHERE Id={inputModel.Id} AND RowVersion={inputModel.RowVersion}");

            if (affectedRows == 0)
            {
                bool lessonExists = await db.QueryScalarAsync <bool>($"SELECT COUNT(*) FROM Lessons WHERE Id={inputModel.Id}");

                if (lessonExists)
                {
                    throw new OptimisticConcurrencyException();
                }
                else
                {
                    throw new LessonNotFoundException(inputModel.Id);
                }
            }
            LessonDetailViewModel lesson = await GetLessonAsync(inputModel.Id);

            return(lesson);
        }