DbUpdateConcurrencyException:数据库操作预计会影响 1 行但实际上影响了 0 行。 -等待_context.SaveChangesAsync(真);
DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). - await _context.SaveChangesAsync(true);
我使用的是 EF Core 5.0 版本
Asp.net 核心剃须刀页面 (.Net 5.0)
SQL 2019
学生 Table 包含 RowVersion(TimeStamp 不为空)
我生成了 dbcontext 脚手架,模型构建器是
entity.Property(e => e.RowVersion)
.IsRequired()
.IsRowVersion()
.IsConcurrencyToken();
每当我更新学生姓名时,我都会收到错误消息
DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s).
我尝试用
替换模型构建器
entity.Property(e => e.RowVersion)
.IsRowVersion()
执行更新的代码:
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Attach(Student).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync(true);
}
catch (DbUpdateConcurrencyException)
{
if (!StudentExists(Student.StudentId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToPage("./Index");
}
但我无法克服错误。问题仅在于 sql-server.
的时间戳数据类型
我在 8 小时后发现,更新命令本身缺少 RowVersion,因为它没有在回传中传递。
我在 Rowversion 的视图页面中加入了一个隐藏字段,解决了这个问题。
<input type="hidden" asp-for="Student.StudentId" />
<input type="hidden" asp-for="Student.RowVersion" />
我使用的是 EF Core 5.0 版本
Asp.net 核心剃须刀页面 (.Net 5.0)
SQL 2019
学生 Table 包含 RowVersion(TimeStamp 不为空) 我生成了 dbcontext 脚手架,模型构建器是
entity.Property(e => e.RowVersion)
.IsRequired()
.IsRowVersion()
.IsConcurrencyToken();
每当我更新学生姓名时,我都会收到错误消息
DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s).
我尝试用
替换模型构建器 entity.Property(e => e.RowVersion)
.IsRowVersion()
执行更新的代码:
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Attach(Student).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync(true);
}
catch (DbUpdateConcurrencyException)
{
if (!StudentExists(Student.StudentId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToPage("./Index");
}
但我无法克服错误。问题仅在于 sql-server.
的时间戳数据类型我在 8 小时后发现,更新命令本身缺少 RowVersion,因为它没有在回传中传递。
我在 Rowversion 的视图页面中加入了一个隐藏字段,解决了这个问题。
<input type="hidden" asp-for="Student.StudentId" />
<input type="hidden" asp-for="Student.RowVersion" />