ConcurrencyCheck 在第一次单次更新时抛出 OptimisticConcurrencyException

本文关键字:OptimisticConcurrencyException 更新 第一次 单次 ConcurrencyCheck | 更新日期: 2023-09-27 17:56:51

我正在做一个简单的更新,如果我不修改我用[ConcurrencyCheck]属性装饰的字段,它可以工作。

这是我的财产:

[Required]
[Index]
[Display(Name="First Name")]
[ConcurrencyCheck]
public string firstname { get; set; }

这是我的更新操作方法:

[HttpPost]
[Err()]
public async Task<ActionResult> Edit(Entries entry)
 {
     if (ModelState.IsValid)
     {
            CtxRepoRBMS<CarlCtx, Entries> ctxRDMS = HttpContext.GetOwinContext().Get<CtxRepoRBMS<CarlCtx, Entries>>();
            MongoRepo<Items> ctxMongo = new MongoRepo<Items>(client: new MongoClient("mongodb://localhost"), dbName: "items");
            ctxRDMS.Update(entry);
            ctxRDMS.Save();

ctxRDMS.Update是:

public void Update(Cls entry)
{
       ctx.Entry(entry).State = EntityState.Modified;
}

ctxRDBMS.Save

public void Save()
{
   ctx.SaveChanges();
}

如果我修改除firstname以外的其他属性,则更新工作正常,但是一旦我更改并保存它,就会抛出没有意义的OptimisticConcurrencyException,因为除了我之外没有其他人编辑firstname

ConcurrencyCheck 在第一次单次更新时抛出 OptimisticConcurrencyException

我想我刚刚弄清楚了这一点。

如果列用 [concurrencycheck] 装饰,则无法在不引发并发异常的情况下更改该列(至少我无法更改它)。

没有一个文档如此清楚地说明它,我看到的示例通常会在他们的示例中选择一些列,这些列很可能在数据的生命周期内更改(在一种情况下是姓氏)。

共识似乎是使用 SQL Server 中的 ROWVERSION 列作为模型中唯一的并发令牌。

相关文章:
  • 没有找到相关文章