我正在使用带有POCO代理的EF4。
A. 我有一个对象图,它是从一个ObjectContext实例中获取的。该ObjectContext已被处理。
B. 我有一个对象,它是从另一个ObjectContext实例中获取的。该ObjectContext也已被处理。
我想使用B中的实体来设置A中一堆东西的相关属性...类似于
foreach(var itemFromA in collectionFromA)
{
itemFromA.RelatedProperty = itemFromB;
}
当我这样做时,我会收到异常:
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
我猜我需要在ObjectContex销毁时从中分离这些实体,以使上述操作正常运行...问题是,当ObjectContext销毁时,从它分离所有实体似乎会破坏整个图。如果我做这样的事情:
objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged)
.Select(i => i.Entity).OfType<IEntityWithChangeTracker>().ToList()
.ForEach(i => objectContext.Detach(i));
图中的所有关系似乎都被取消了。
我应该如何解决这个问题?