关于asp.net mvc:在MVC回发上重新查询数据库

Requerying database on MVC postback

在上一篇文章(ASP.NET MVC 5模型绑定编辑视图)中,答案建议此控制器代码处理编辑视图回发:

1
2
3
4
5
6
7
8
9
public ActionResult Edit(WarrantyModelEditViewModel vm)
{
   if (ModelState.IsValid)
   {
      var warranty = db.Warranties.Find(vm.Id);
     .
     .
     .
}

问题:在MVC中,重新查询有问题的保修数据库真的是唯一做到这一点的方法吗?它被认为是最佳实践方法吗?(我看过这篇文章,如何重新使用MVC发布的模型数据,但是它有点过时,所以我想确保我的信息是最新的,从MVC 5和EF6开始。)

此外,我认为存在各种数据库并发问题,例如,如果在视图呈现之后,但在回发之前,记录被另一个用户修改或删除。有没有好的资源来讨论处理各种情况的方法?


您还可以附加只需要对数据库进行一次调用的实体。检查这个已解决的线程。

简而言之,像这样的东西-

1
2
3
4
5
db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

对于第二个获得乐观并发性的问题,您可以有一个名为timestamp的列,并可以在更新期间检查它。检查本教程-在ASP.NET MVC应用程序中处理与实体框架的并发性