首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架: ObjectSet附加(),具有多个关系的实体

实体框架: ObjectSet附加(),具有多个关系的实体
EN

Stack Overflow用户
提问于 2015-08-20 21:46:30
回答 1查看 146关注 0票数 0

我在和一个实体框架问题做斗争,完全超出了我的深度。

简而言之,在试图持久化对象的过程中,我碰到了一个无效的操作异常。我追溯到两个实体以及它们之间的关系。我的实际上下文太技术性了,没有任何意义,所以在一个简单的领域中,这是一个等价的例子:

人物

  • IdPerson主键
  • 名字

组织

  • IdOrganisation主键
  • IdCeo外键=>人员
  • IdCfo外键=>人员

因此,组织和人之间有两种多到零或一种关系。

  • 一个组织可能有零人或一人担任首席执行官。
  • 一个组织可能有零人或一人担任首席财务官。
  • 一个人可能是零或多个组织的首席执行官和/或首席财务官。

当我尝试ObjectSet.Attach()时,我遇到了一个例外,该组织的首席执行官和首席财务官都是同一个人。似乎EF试图(但失败)连接第二个人。

代码语言:javascript
复制
System.InvalidOperationException: An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
at System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity, EntitySet entitySet, String argumentName)
at System.Data.Objects.DataClasses.RelatedEnd.AddEntityToObjectStateManager(IEntityWrapper wrappedEntity, Boolean doAttach)
at System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper wrappedEntity, Boolean relationshipAlreadyExists, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.EntityReference`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.RelatedEnd.WalkObjectGraphToIncludeAllRelatedEntities(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper wrappedEntity, Boolean relationshipAlreadyExists, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.EntityReference`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach)
at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
at System.Data.Objects.ObjectSet`1.Attach(TEntity entity)

如果首席执行官和首席财务官是不同的人,或者我删除了组织和个人之间的联系,问题就不会发生。

EF是否能够处理这种模式/关系?如果是,我如何解决异常?

EN

回答 1

Stack Overflow用户

发布于 2015-08-20 22:00:36

向实体框架说明哪些是对外关系

代码语言:javascript
复制
Organisation

//CEO
public int IdCeo { get; set; }
[ForeignKey("IdCeo")]
public virtual Person CEO { get; set; }


//CFO
public int IdCfo { get; set; }
[ForeignKey("IdCfo")]
public virtual Person CFO { get; set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32128953

复制
相关文章

相似问题

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