刪除實體框架中的對象及其所有相關實體

ado.net entity-framework

有沒有人知道如何刪除EF中的對象及其所有相關實體,而無需手動遍歷對像圖並刪除每個對象?

例如,我有SalesOrder和SalesOrderDetails,它們之間的關係為1:N。當我刪除SalesOrder時,我希望自動刪除所有SalesOrderDetails。

這可能在EF嗎?

一般承認的答案

您不應該在實體框架中執行此操作。所有流行的關係數據庫都支持外鍵上的ON CASCADE DELETE ,這也是非常有效的。我建議你順其自然。


熱門答案

在這篇文章中,Alex Jamese(發表他的回答),有一篇關於這個主題的完整文章。

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

EF負責SaveChanges()之後ObjectContext的正確性。因此,EF嘗試將ObjectContext與數據庫中預期的級聯之後的預期數據庫狀態同步。一個告訴我的問題是,如果你打開像SqlProfiler這樣的東西, 你會注意到當刪除一個主體時,EF發出了它所知道的依賴實體的DELETE請求(即在ObjectContext中加載的)。基本上,這裡發生的是實體框架期望刪除數據庫中的主體,將刪除數據庫中的所有依賴項。所以它應該發出什麼,應該是多餘的DELETE來請求自己,以便從ObjectContext中刪除已經加載的依賴項。需要注意的關鍵是EF 檢索所有依賴實體並為它們發出刪除:它只刪除已經在內存中的依賴項。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因