我映射子集合與級聯=「全刪除,孤兒」,並試圖nhibernate - 刪除親子的最有效方法?
var parent = session.Load<Parent>(id);
session.Delete(parent);
但它同時也被裝入母公司及其所有子項刪除之前。 有沒有辦法刪除父母和孩子沒有加載它們或至少只加載父母?
我映射子集合與級聯=「全刪除,孤兒」,並試圖nhibernate - 刪除親子的最有效方法?
var parent = session.Load<Parent>(id);
session.Delete(parent);
但它同時也被裝入母公司及其所有子項刪除之前。 有沒有辦法刪除父母和孩子沒有加載它們或至少只加載父母?
我不是NHibernate的專家,我仍然非常瞭解它。我堅持要糾正,但默認情況下不會延遲加載NHibernate,即Parent.Child只會在被訪問時初始化(以及數據加載)。
當刪除Parent時,通過使用all-delete-orphan放置到位的關係模型意味着在刪除Parent時必須首先刪除與Parent相關的Child成員。這可以解釋爲什麼他們被加載。
如果您爲避免性能方面的原因而試圖避免加載子項,則可能需要爲此特例實現自己的SQL。
這很簡單,只需在數據庫上使用級聯刪除即可。如果這不是使用在數據庫級別上運行的自定義查詢的選項,或者只是使用此方法。
NHibernate不能通過查詢來做到這一點,它需要檢索每個單獨的行刪除,因爲它需要刪除它們的行的鍵。這是什麼讓這個昂貴。
只需在數據庫上使用級聯刪除。這是數據庫擅長的事情。