2011-04-23 105 views
0

我正在使用nhibernate,我有一個問題。關於延遲加載的問題

說我有一個對象(ObjectA)與另一個對象(ObjectB)有某種關係。

ObjectA -> TableA 
ObjectB -> TableB 

現在我做一個查詢並從TableA取回結果,現在它在ObjectA中。

如果我這樣做

int b = ObjectA.ObjectB.ColumnA; 

它會熄滅和消防查詢嗎?由於它正在執行延遲加載。

,如果我這樣做

int b1 = ObjectA.ObjectB.ColumnA; 
int b2 = ObjectA.ObjectB.ColumnA; 
int b3 = ObjectA.ObjectB.ColumnA; 
int b4 = ObjectA.ObjectB.ColumnA; 

這是所有的方法方法接二連三發生的事情。你會去做5個查詢還是隻做一個?

怎麼樣,如果我這樣做

int b1 = ObjectA.ObjectB.ColumnA; 
    string b2 = ObjectA.ObjectB.ColumnB; 

這會斷火2個查詢或一個?

回答

6

所有這些方法只需一次調用就可以加載ObjectB。

之後,它在內存中;爲什麼會再次訪問數據庫?

1

它也取決於列B提到的Nhibernate映射& ColumnB for ObjectB。如果它們碰巧映射到延遲加載設置爲true的單獨類/實體,那麼當加載對象B時,ColumnA映射實體不會被加載。只有在訪問它們時,它們纔會被Nhibernate加載。