2010-10-29 69 views
4

我使用POCO生成的類 - 任何方式,我可以tweek模板,以便當我從子集合中刪除時,刪除的項目也從D b ?刪除()從集合不標記對象被刪除 - EF4

或者也許在部分類中,我可以重寫某些內容,捕獲一個事件..?

基本上我想Order.OrderDetails.Remove(orderDetail)從數據庫中刪除orderDetail。

我做不是想要訪問上下文並做context.OrderDetails.Delete(orderDetail)。

回答

1

當您從集合導航屬性中刪除對象時,實體框架將刪除對象之間的關係(將引用其父對象的子對象的屬性歸零)。

如果要刪除記錄,則需要將對象標記爲State = EntityState.Deleted。你可以通過訪問上下文來實現,或者如果你不想,解決方法是識別ChangeTracker中孤兒的子對象,並在那裏設置他們的狀態爲Deleted。

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; 
}