簡體   English   中英

實體框架 - 按ID刪除相關記錄

[英]Entity framework - remove related records by id

好的。 假設我有結構:

學校 - >學生 - >學生父母< - 父母 - >地址

學校可以有很多學生,學生可以是親戚,也有同一套父母(可能是多對)。 每個父母可以有多個地址。
假設擁有相同父母的學生不能在不同的學校學習。

如果給出school_Id = 5,我想刪除這所學校和所有相關記錄。 如何在Entity Framework 4中輕松完成此操作?

您的問題的答案與此問題相同。

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

您需要設置外鍵的“CASCADE DELETE”並在實體模型中反映出來。 然后,當您刪除該實體時,數據庫將進行必要的更改以維護參照完整性。

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

這似乎要做很多工作,所以你可能想采取另一種方法解決這個問題 - 使用映射到ObjectContext數據庫上的存儲過程刪除所有這些數據,這樣做會更好,因為你不需要得到所有的數據到內存中。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM