2010-06-03 28 views
2

我映射子集合與級聯=「全刪除,孤兒」,並試圖nhibernate - 刪除親子的最有效方法?

var parent = session.Load<Parent>(id); 
session.Delete(parent); 

但它同時也被裝入母公司及其所有子項刪除之前。 有沒有辦法刪除父母和孩子沒有加載它們或至少只加載父母?

回答

1

我不是NHibernate的專家,我仍然非常瞭解它。我堅持要糾正,但默認情況下不會延遲加載NHibernate,即Parent.Child只會在被訪問時初始化(以及數據加載)。

當刪除Parent時,通過使用all-delete-orphan放置到位的關係模型意味着在刪除Parent時必須首先刪除與Parent相關的Child成員。這可以解釋爲什麼他們被加載。

如果您爲避免性能方面的原因而試圖避免加載子項,則可能需要爲此特例實現自己的SQL。

0

這很簡單,只需在數據庫上使用級聯刪除即可。如果這不是使用在數據庫級別上運行的自定義查詢的選項,或者只是使用此方法。

NHibernate不能通過查詢來做到這一點,它需要檢索每個單獨的行刪除,因爲它需要刪除它們的行的鍵。這是什麼讓這個昂貴。

只需在數據庫上使用級聯刪除。這是數據庫擅長的事情。

相關問題