在MVC回发上重新获取数据库

时间:2014-01-25 16:48:00

标签: asp.net-mvc entity-framework asp.net-mvc-5

在上一篇文章(ASP.NET MVC 5 Model-Binding Edit View)中,答案建议此Controller代码处理编辑视图回发:

public ActionResult Edit(WarrantyModelEditViewModel vm)
{
   if (ModelState.IsValid)
   {
      var warranty = db.Warranties.Find(vm.Id);
     .
     .
     .
}

问题: 是否真的是在MVC中重新查询数据库以获得有关保修的唯一方法,它是否被认为是最佳实践方法? (我看过这篇文章,How to re-use model data on post back with MVC,但它有点陈旧,所以我想确保我的信息是最新的MVC 5和EF 6。)

此外,我认为存在各种数据库并发问题,例如,在呈现视图之后但在回发之前,其他用户是否修改或删除了记录。是否有任何好的资源可以讨论处理各种情况的方法?

1 个答案:

答案 0 :(得分:2)

您还可以执行附加只需要一次调用数据库的实体。 Check this solved thread.

简而言之 -

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

对于获得乐观并发的第二个问题,您可以拥有一个名为 timestamp 的列,并可以在更新期间检查它。查看本教程 - Handling Concurrency with the Entity Framework in an ASP.NET MVC Application