2011-12-20 74 views
0

好的。假設我有結構:實體框架 - 按ID刪除相關記錄

學校 - >大學生 - > StudentParents < - 家長 - >地址

學校可以有很多學生,學生可以是親戚,具有相同的一組家長(可─太多)。每個家長可以有多個地址。
假設擁有同一組父母的學生不能在不同的學校學習。

如果給定school_Id = 5,我想刪除這所學校和所有相關記錄。 如何在Entity Framework 4中輕鬆做到這一點?

+0

可能重複的[如何刪除與特定實體相關的所有實體?](http://stackoverflow.com/questions/8557679/how-do-i-delete-all-the-entities-related-到一個特定的實體) – Eranga 2011-12-20 01:46:14

回答

2

對此問題的回答將與this question相同。

您正試圖解決錯誤層中的問題。您需要 重新考慮您的數據庫設計,特別是如何保持 參照完整性。

您需要設置外鍵的「CASCADE DELETE」,並在您的實體模型中反映 。然後數據庫將進行必要的 更改,以在刪除該實體時保持參照完整性。

0

實體框架無法從數據庫中刪除未作爲內存對象實例化的數據。這意味着您需要加載學校數據,所有學生數據,所有學生家長數據等,然後您需要手動刪除所有數據。

這似乎是很多工作要做,所以你可能要採取另一種方法解決這個問題 - 刪除使用數據庫的存儲過程,所有這些數據映射到ObjectContext,這將有更好的表現,因爲你不會需要將所有數據存入內存。

但這似乎也很麻煩。最好的方法是在數據庫上創建Cascade delete約束,並將其映射到實體框架的模型中。這有兩個好處 - 您只需要加載學校數據,並且在從模型中刪除它之後,它將從數據庫中刪除,級聯刪除將刪除所有參考數據。但是如果你的學校和學生的數據已經在內存中,EF將負責將那些來自內存的對象標記爲已刪除,這將使你的數據與數據庫狀態保持一致。

此問題的最佳解決方案取決於您是否可以修改數據庫。如果可以的話 - 去找cascade delete。如果你不能 - 我會建議stored procedure方法更好的表現(假設性能是一個問題,並且數據庫中有很多學生,家長等)。