c# - 无法更新实体框架中的记录
问题描述
我收到的错误消息是:DbUpdateConcurrencyException
我正在使用更新 IdentityRole 表。我正在使用 ViewModel 来显示和捕获数据,然后在我的 OnPost() 中将其传回。数据按预期进入我的 IdentityRole 属性。我确保主键隐藏在表单中。我还尝试将 _context.Update(Role) 与 SaveChanges() 结合使用,但我总是遇到同样的错误。我还确保我的 ViewModel 和 IdentityRole 属性都有 [BindProperty]。
这是我的控制器或代码。
public IActionResult OnPost()
{
Role.Name = RoleViewModel.RoleName;
Role.NormalizedName = RoleViewModel.RoleName.ToUpper();
Role.ConcurrencyStamp = DateTime.Now.ToString();
if (!ModelState.IsValid)
{
return Page();
}
_context.Entry(Role).Property(x => x.Name).IsModified = true;
_context.Entry(Role).Property(x => x.NormalizedName).IsModified = true;
_context.Entry(Role).Property(x => x.ConcurrencyStamp).IsModified = true;
_context.SaveChanges();
return Redirect("/Admin/HomeRole");
}
我的视图模型
public class EditRoleViewModel
{
public EditRoleViewModel()
{
Users = new List<string>();
}
public string Id { get; set; }
[Required(ErrorMessage = "Role Name is required")]
public string RoleName { get; set; }
public List<string> Users { get; set; }
}
这是表格
<form method="post" class="mt-3">
<input asp-for="RoleViewModel.Id" type="hidden" />
<input asp-for="RoleViewModel.Users" type="hidden" />
<div class="form-group row">
<label asp-for="RoleViewModel.RoleName" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="RoleViewModel.RoleName" class="form-control">
<span asp-validation-for="RoleViewModel.RoleName" class="text-danger"></span>
</div>
</div>
</form>
解决方案
从我在您的问题中看到的,您需要传递 Http Post 的 ID。我了解您将 Id 隐藏在表单中,但您需要将其传递给控制器,然后传递给模型以保存。所以,像下面这样,
public IActionResult OnPost(RoleViewModel model){......}
然后分配ID。如果您正在更新没有 Id 的行,那么您将在 DbContext 中获得此异常。
也检查这些。试着让我知道。
推荐阅读
- r - ggplot 强大的集群 SE
- elasticsearch - 将数组与 ELASTICSEARCH 中的数组匹配
- git - 如何在此工作流程中保持服务器分支更新?
- laravel - 消除 Laravel 队列中的延迟
- flutter - 盒子上的资产图像
- asp.net-core - 有没有办法在 bootstrap/razor 中将值表示为星星?
- flutter - 当我从背景颤动进入前台时,showDialog 不可见
- python - 使用应用 lambda 函数根据另一列的条件创建一个新列
- functional-programming - 无论如何要及时获取列表的第 i 个元素 o(1) 标准 ML
- r - 如何在特定文本匹配中替换 R 中的值 NA