在上一篇文章(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。)
此外,我认为存在各种数据库并发问题,例如,在呈现视图之后但在回发之前,其他用户是否修改或删除了记录。是否有任何好的资源可以讨论处理各种情况的方法?
答案 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