首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >{“ObjectStateManager中已存在具有相同键的对象。ObjectStateManager无法跟踪具有相同键的多个对象。”}

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

Stack Overflow用户
提问于 2013-05-12 09:31:04
回答 1查看 4.7K关注 0票数 1

我有这段代码,但我有例外

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

在其他部分。

代码语言:javascript
复制
 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();
      }
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-12 09:51:34

此异常意味着存在一个重复的实体,该实体的密钥已被上下文跟踪。每个实体只能被上下文跟踪一次。如果尝试附加同一实体的另一个实例(它的密钥与已跟踪的实例相同),则会得到此异常。

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16505975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档