MVC:具有ModelState.Isvalid和DbUpdateConcurrencyException的控制器或存储库

时间:2018-05-15 20:00:27

标签: asp.net-mvc model-view-controller asp.net-core controller

ModelState.Isvalid和DbUpdateConcurrencyException应该在Controller还是Repository中?我创建了一个MVC核心项目,在桌子上进行了脚手架。但是,脚手架不会创建接口或存储库,因此为了正确的软件设计,将插入/更新代码放在存储库中。

只是询问ModelState.IsValid和DbUpdateConcurrencyException是否也应放在存储库中?如果放入存储库,我会收到编译错误。我是软件设计和MVC的新手,还在学习。

控制器

if (ModelState.IsValid)
{
    try
    {
        _context.Update(ProductTransaction);
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {                    
         if (!ProductTransactionExists(ProductTransaction.Id))
         {
             return NotFound();
         }
         else
         {
             throw;
         }

存储库

ProductTransaction.Id= ProductTransactionViewModel.Id;
ProductTransaction.Date= ProductTransactionViewModel.Date
ProductTransaction.CustomerName = ProductTransactionViewModel.CustomerName

1 个答案:

答案 0 :(得分:0)

  

ModelState.Isvalid和DbUpdateConcurrencyException应该在   控制器或存储库?我创建了一个MVC核心项目   脚手架在桌子上。

ModelState.IsValid属于表示层,它应该留在那里。如果其值为true,则应在用户提交之前返回用户操纵的相同视图。

DbUpdateConcurrencyException属于存储库层,您不得将其传播到表示层。发生时捕获该异常。您记录有关它的相关详细信息。之后,您抛出一个自定义激活,例如BusinessException,其中仅包含用户可以理解的消息,例如“某人已经修改了内容。因此请刷新以查看”。表示层只知道BusinessException以及如何阅读其消息。