更新行时如何解决DbUpdateConcurrencyException?

时间:2014-10-01 19:10:35

标签: c# asp.net entity-framework

我使用实体框架代码第一种方法来处理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");
    }
}

1 个答案:

答案 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 … … …
}