2010-10-29 2 views
4

Я использую классы, сгенерированные POCO, любым способом, которым я могу поддразнивать шаблон, чтобы при удалении из дочерней коллекции удаляемый элемент также удалялся из db?Удалить() Из коллекции не помечен объект как удаленный - EF4

Или, может быть, в частичном классе я могу переопределить что-то, поймать событие ..?

В основном я хочу Order.OrderDetails.Remove (orderDetail), чтобы удалить orderDetail из db.

Я делаю не хочу получить доступ к контексту и сделать контекст.OrderDetails.Delete (orderDetail).

ответ

1

Когда вы удаляете объект из свойства навигации коллекции, Entity Framework удаляет взаимосвязь между объектами (обнуление свойства дочернего объекта, ссылающегося на его родителя).

Если вы хотите удалить запись, вам необходимо пометить объект как State = EntityState.Deleted. Вы можете либо сделать это, обратившись к контексту, либо, если не хотите, обходным путем было бы идентифицировать дочерние объекты, которые остались сиротами в ChangeTracker, и установить их состояние для удаления.

var orphans = context.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified && typeof(e.Entity) is ChildType); 
foreach (DbEntityEntry orphan in orphans) 
{ 
    orphan.State = EntityState.Deleted; 
} 
Смежные вопросы