“意外的行数(0),实体可能已被修改……”调用SaveChangesAsync时

本文关键字:修改 SaveChangesAsync 调用 实体 意外 意外的行数 | 更新日期: 2023-09-27 18:13:16

我有一个简单的WPF网格,它使用实体框架从数据库加载数据,我需要允许用户编辑网格中的数据,并将更新保存到数据库。

不幸的是,当我试图通过调用SaveChangesAsync()保存更新时,我得到以下异常:

System.Data.Entity.Core.OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

调用是在我的ViewModel类之一中进行的:

...   
   List<Adjustment> changesList = [ here I load the current content of the GridControl ]
   MyDbProxy dataProxy = new MyDbProxy();
   await dataProxy.SaveAdjustments(changesList);

和包装DB的类非常简单:

public class MyDbProxy {
   private readonly MyDb _db;
   public MyDbProxy() {
      _db = new MyDb();
   }
...
   public async Task SaveAdjustments(IEnumerable<Adjustment> changesList) {
      using (_db) {
         foreach (var a in changesList) {
            _db.Adjustments.Attach(a);
            _db.Entry(a).State = EntityState.Modified;
         }
         await _db.SaveChangesAsync();
      }
   }
}

“意外的行数(0),实体可能已被修改……”调用SaveChangesAsync时

此异常抛出,因为您创建了一个新对象,并告诉EF它使用EntityState进行了修改。修改