2012-06-17 4 views
0

У меня есть объект ClubItem с коллекцией отношений ICollection ClubUsers. Я загружаю ClubItem из контекста и добавляю пару новых пользователей в CluItem. При сохранении ClubItem в отключенном состоянии контекст не видит новых ClubUsers в качестве новых объектов. Как сказать, что что-то изменилось? Я Allready использовать это, чтобы изменить entitystate из ClubItem:EF 4.3 CF не обновляет отношения при сохранении изменений

public virtual void Update(IEntity entityToUpdate) 
    { 
     DbSet.Attach(entityToUpdate); 
     Context.Entry(entityToUpdate).State = EntityState.Modified; 

     SaveChanges(); 
    } 

ответ

2

В вашем конкретном случае, вероятно, можно просто удалить Attach линию. Attach помещает отдельный объект, включая другие отдельные объекты в графе объектов, в состояние Unchanged. Когда вы меняете состояние на Modified, это влияет только на родительский объект, дети все еще находятся в состоянии Unchanged. Если вы звоните SaveChanges, то дети не будут сохранены, так как их состояние равно Unchanged.

Если вы не вызываете Attach дети остаются отдельностоящий до SaveChanges не называется, где EF будет предположить, что они новые лица (потому что они не привязаны к контексту) и установить их состояние в Added. Затем они будут вставлены в базу данных.

Однако, если вы удалите строку Attach, вы больше не можете использовать метод, чтобы обновить отношения между существующим родителем и существующими дочерними элементами.

В общем случае, когда отдельный объект содержит дочернюю коллекцию сущностей, которые были изменены, добавленные туда, где сущности были удалены из вас, обычно необходимо перезагрузить исходный граф объекта из базы данных и объединить изменения в него. Такое обновление сложного графа отдельных объектов не работает в общем виде и потребует конкретный код типа сущности. Пример: https://stackoverflow.com/a/5540956/270591

Смежные вопросы