gpt4 book ai didi

c# - 无法使用 EFCore、EntityState.Modified : "Database operation expected to affect 1 row(s) but actually affected 0 row(s)." 编辑数据库条目

转载 作者:可可西里 更新时间:2023-11-01 08:26:16 41 4
gpt4 key购买 nike

我将 Identity Core 1.0 与 ASP.NET MVC Core 1.0 和 Entity Framework Core 1.0 结合使用来创建一个简单的用户注册系统 this article作为起点,我正在尝试添加用户角色。我可以添加用户角色,但无法编辑它们。这是 RolesController 中的 Edit 操作:

    [HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(IdentityRole role)
{
try
{
_db.Roles.Attach(role);
_db.Entry(role).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception ex)
{
Console.WriteLine(ex);
return View();
}
}

这是相应 View 中的表单:

@model Microsoft.AspNet.Identity.EntityFramework.IdentityRole
@{
ViewBag.Title = "Edit";
}

<h2>Edit Role</h2>
<hr />
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
<div>Role name</div>
<p>@Html.TextBoxFor(model => model.Name)</p>
<input type="submit" value="Save" />
}

新的角色名称没有保存到数据库中,我得到以下异常:Database operation expected to affect 1 row(s) but actually affected 0 row(s).加载实体后数据可能已被修改或删除。

我能够使用这个确切的代码(使用 Microsoft.AspNet.Identity.EntityFramework 依赖项而不是 EntityFrameworkCore)使用 EF 7、Identity 3 编辑数据库条目等

关于为什么这段代码不允许修改数据库条目有什么想法吗?

最佳答案

除非有一个隐藏的异常作为愚蠢的随机异常隐藏在这背后,否则在异常中明确说明原因。

Edit 操作中收到 role 对象时,检查 Id 并尝试在数据库中查找该 id。您看到的异常消息指出,它期望找到与您附加的对象匹配的 Id 的行,但事实并非如此,因此无法进行更新,因为它找不到匹配的行来更新它.

编辑:

您两次附加实体,删除对 .Attach(role) 的调用并保留其下方足以将对象添加到修改状态的跟踪上下文的行。

//_db.Roles.Attach(role); //REMOVE THIS LINE !.
_db.Entry(role).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

请注意,将条目状态设置为已修改将在调用 .SaveChanges() 时更新所有属性值,因此如果您只想更新某些属性,请参阅 this answer .

如果这不能解决您的问题,请检查您可能遗漏的任何内部异常。有时异常消息没有意义并掩盖了您可能能够在内部异常中找到的真正问题。

关于c# - 无法使用 EFCore、EntityState.Modified : "Database operation expected to affect 1 row(s) but actually affected 0 row(s)." 编辑数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460686/

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