gpt4 book ai didi

c# - 更新行时如何解决DbUpdateConcurrencyException?

转载 作者:可可西里 更新时间:2023-11-01 08:45:00 25 4
gpt4 key购买 nike

我正在为 ASP.NET MVC 应用程序使用 Entity Framework 代码优先方法。在提交以保存更改时编辑一行后,我收到以下 http post 方法错误:

An exception of type 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' occurred in EntityFramework.dll but was not handled in user code.

在 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");
}
}

最佳答案

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

如本 link 所述

Exception thrown by DbContext when it was expected that SaveChanges for an entity would result in a database update but in fact no rows in the database were affected.

在我的例子中,上面的陈述是正确的,因为我试图更新一行但没有 id 没有行被更新。因此,异常(exception)。

可以使用包含 id 的隐藏输入元素来完成。下面的代码显示了如何在 Edit.cshtml 中执行此操作 –

@using (Html.BeginForm("Edit", "Home", FormMethod.Post,
new { @class = "form-horizontal", role = "form" }))
{
@Html.HiddenFor(m => m.ProjectID)
//Other code … … …
}

关于c# - 更新行时如何解决DbUpdateConcurrencyException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com