这个问题已经以50种不同的方式被问到了500个不同的时间......但是这里又一次,因为我似乎无法找到我正在寻找的答案:
我正在使用EF4和POCO代理.
答:我有一个从ObjectContext的一个实例中获取的对象图.该ObjectContext被释放.
B.我有一个从ObjectContext的另一个实例获取的对象.ObjectContext也被处理掉了.
我想在A中使用B中的实体设置一堆相关的属性....类似于
foreach(var itemFromA in collectionFromA)
{
itemFromA.RelatedProperty = itemFromB;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了例外:
System.InvalidOperationException occurred
Message=The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.
Source=System.Data.Entity
StackTrace:
at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedTarget, Boolean applyConstraints, Boolean addRelationshipAsUnchanged, Boolean relationshipAlreadyExists, Boolean allowModifyingOtherEndOfRelationship, Boolean forceForeignKeyChanges)
at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedEntity, Boolean applyConstraints)
at System.Data.Objects.DataClasses.EntityReference`1.set_ReferenceValue(IEntityWrapper value)
at System.Data.Objects.DataClasses.EntityReference`1.set_Value(TEntity value)
at
Run Code Online (Sandbox Code Playgroud)
我想我需要将这些实体从ObjectContexts中分离出来,以便上面的代码可以工作......问题是,当它处理时从我的ObjectContext中分离所有实体似乎会破坏图形.如果我这样做:
objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged)
.Select(i => i.Entity).OfType<IEntityWithChangeTracker>().ToList()
.ForEach(i => objectContext.Detach(i));
Run Code Online (Sandbox Code Playgroud)
图中的所有关系似乎都未被设置.
我怎样才能解决这个问题?