2010-02-23 103 views
3

我們在服務器端使用NHibernate作爲我們的ORM。如何在NHibernate中有效地使用ID刪除對象?

有時,需要從數據庫中刪除一個對象,只給出該對象的類型和ID。另外,被刪除的對象之前沒有被提取(所以它不在會話緩存中或其他)。

無論如何,我正在使用ISession.Delete(query)過載,其中查詢與from Dummy where Id=5一樣普通。

我的問題是爲什麼NHibernate刪除它之前獲取對象?據我所知,我付出了雙倍往返服務器的手術費用,直觀上應該只需一次往返。

有沒有辦法通過NHibernate的類型和ID從數據庫中刪除一個對象,這樣只需要一次往返?

回答

6

您也可以使用HQL自己刪除它。

session.CreateQuery("delete from Table where id = :id") 
    .SetParameter("id", id) 
    .ExecuteUpdate(); 

但是這不會級聯刪除,我認爲這是它需要先加載的一個原因。

1

如果你打電話ISession.Delete(Session.Load(type, id));,它真的打到分貝,因爲Load()應該返回一個代理,而不是打數據庫?

+1

是的,我的猜測是刪除函數必須以觸發加載的方式訪問代理。 – dotjoe 2010-02-23 22:19:11

+0

和懶加載? – 2010-02-23 22:44:22

+0

我至少可以確認,如果延遲加載關閉,Load仍然首先執行SELECT。我還沒有試圖打開延遲加載類,但看看是否有幫助... – 2011-01-05 22:05:34

相關問題