Этот вопрос задавали 500 раз 50 разным способом ... но опять же, так как я не могу найти ответ, который ищу:
Я использую EF4 с прокси POCO.
A.
У меня есть график объектов, которые я извлек из одного экземпляра ObjectContext. Этот ObjectContext расположен.
B.
У меня есть объект, который я извлек из другого экземпляра ObjectContext. Этот ObjectContext также был удален.
Я хочу установить связанное свойство для нескольких вещей из A, используя сущность в B .... что-то вроде
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
Полагаю, мне нужно отсоединить эти сущности от 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));
Кажется, что все отношения на графике не установлены.
Как мне решить эту проблему?