2009-08-31 92 views
2

使用EF刪除對象(及其子對象)的最佳方法是什麼?我想只傳遞要刪除的對象的id,並讓EF句柄刪除它的依賴數據(外鍵數據)。我是否必須先根據id檢索對象,然後調用「DeleteObject」?實體框架DeleteObject子

回答

8

如果您在數據庫中配置了級聯,那麼刪除該原則應該足夠了。

var stub = new Principal{ID = idToDelete}; 
ctx.AttachTo("PrincipalsEntitySetName", stub); 
ctx.DeleteObject(stub); 

當然這並不是故事的全部,如果有用於引用或字段:

你可以做到這一點無需查詢數據庫得到的東西來使用存根實體像這樣被刪除併發檢查你也需要這些。

如果在另一方面,你只能有一個級聯模型中刪除(即沒有在數據庫中沒有級聯),你需要先獲得內存中的所有家屬,然後調用刪除:

var stub = new Principal{ID = idToDelete}; 
ctx.AttachTo("PrincipalsEntitySetName", stub); 
stub.Dependendents.Load(); 
ctx.DeleteObject(stub); 

這隻適用於EF問題(它期望的)冗餘刪除以保持ObjectContext與其預期在數據庫中發生的同步。

希望這有助於

亞歷

PS我對這個話題有些tips我的MSDN博客。檢出tip 33(級聯刪除)和tip 26(存根實體)