我使用实体框架代码第一种方法来处理ASP.NET MVC应用程序。在提交保存更改时编辑一行后,我发现http post方法出现以下错误:
类型的例外 ' System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' 发生在EntityFramework.dll中,但未在用户代码中处理。
db.SaveChanges()会遇到此错误。
db.Entry<Project>(EditedProj).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
主要代码:
[HttpGet]
public ActionResult Edit(int id)
{
using (var db = new ProjectContext())
{
return View(db.Projects.Find(id));
}
}
[HttpPost]
public ActionResult Edit(Project EditedProj)
{
using (var db = new ProjectContext())
{
db.Entry<Project>(EditedProj).State =
System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Projects");
}
}
答案 0 :(得分:10)
我找到了答案。我没有为Http Post动作方法传递id值。
如link
所述当预期实体的SaveChanges会导致数据库更新但事实上数据库中没有行受到影响时,DbContext抛出异常。
在我的情况下,上面的陈述是正确的,因为我试图更新一行但没有id没有更新行。因此,例外。
可以使用包含id的隐藏输入元素来完成。下面的代码显示了如何在Edit.cshtml中执行此操作 -
@using (Html.BeginForm("Edit", "Home", FormMethod.Post,
new { @class = "form-horizontal", role = "form" }))
{
@Html.HiddenFor(m => m.ProjectID)
//Other code … … …
}