更新行时如何解决DbUpdateConcurrencyException?

Ami*_*san 12 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();
Run Code Online (Sandbox Code Playgroud)

主要代码:

[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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*san 10

我找到了答案.我没有为Http Post动作方法传递id值.

如此链接所述

当预期实体的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 … … …
}
Run Code Online (Sandbox Code Playgroud)