1

我有这个代码,但我得到了异常

ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

在其他部分。

 public int AddOrUpdateEntity<T>(T entity) where T : class , IEntity
 {
     int numberOfobjectsWritten = 0;

     using (DalContext dbContext = new DalContext())
     {
       //If Id == 0 it means it's a new entity in Db and needs to be added
         dbContext.Entry<T>(entity).State = entity.Id == 0 ?
                                   EntityState.Added :
                                  EntityState.Modified;

         numberOfobjectsWritten = dbContext.SaveChanges();
      }
 }
4

1 回答 1

5

此异常意味着上下文已跟踪具有相同键的重复实体。每个实体只能被上下文跟踪一次。如果您尝试附加同一实体的另一个实例(它与已跟踪的实例具有相同的键),您将收到此异常。

这意味着您尝试更新的实体的另一个实例已被上下文跟踪。因为附加或添加总是应用于整个对象图(它也应用于通过导航属性访问的相关实体),所以有问题的实体不一定是您要修改的实体,而是它的任何关系。

您可以尝试使用dbContext.ChangeTracker.Entries<T>().FirstOrDefault(e => e.Id == entity.Id)来检查是否已经跟踪了具有相同键的实体实例。

于 2013-05-12T09:51:34.713 回答