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" />