public async Task UpdateAsync(Seller obj) { //Any - serve para verificar que existe algum registro no banco de dados na condição passada //Se não existir, lançar exceção. bool hasAny = await _context.Seller.AnyAsync(x => x.Id == obj.Id); if (!hasAny) { throw new NotFoundException("Id not found"); } //Quando você chama a operação de atualizar no BD, O BD pode retornar uma exceção e conflito //de concorrência //Criar um try-catch para capturar uma possível exceção de concorrência do BD. try { _context.Update(obj); await _context.SaveChangesAsync(); } /*DbUpdateConcurrencyException - exceção lançada pelo Entity Framework * No cath será relançada a exceção em nível de serviço criada * ou seja, o cath intercepta uma exceção do nível de acesso a dados e relança a exceção, * usando a própria exceção em nível de serviço. Muito importante para segregar as camadas. * A camada de serviço não vai propagar uma exceção do nível de acesso a dados, a exceção será * lançada na própria camada de serviço. Assim sendo, o controlador, no caso, o SellersController, * vai ter de lidar somente com exceções da camada de serviço, é uma forma de respeitar a arquitetura * proposta.*/ catch (DbUpdateConcurrencyException e) { throw new DBConcurrencyException(e.Message); } }
public async Task <IActionResult> Edit(int id, [Bind("Id,Name")] Department department) { if (id != department.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(department); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!DepartmentExists(department.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(department)); }