2008-12-22 57 views
4

我剛開始使用NHibernate和流利NHibernate,我認爲它很棒。我一直在配置所有的映射,以便在類之間的任何關係中使用LazyLoading,因爲通常我發現不需要預先加載所有的東西。但是,有時您知道100%您將加載所有關係或至少一個關係,並且如果您事先獲得數據,它將保存額外的連接。更改NHibernate中的初始LazyLoad行爲

有無論如何,你可以告訴NHibernate加載一個關係的關係數據並覆蓋初始設置?

我之前使用LinqToSql,爲此我會創造條件,具有過載什麼項目應該載入中關係時neccesary庫。這工作得非常好,所以我想爲NHibernate提供類似的東西。

回答

7

我發現這是可以使用的NHibernate查詢的惰性加載/預先加載功能。

以正常的方式創建您的ICriteria,然後組織名稱(關係屬性,對我來說是價格),然後將提取類型可以加入,選擇,lazyload,渴望

.SetFetchMode("Prices", FetchMode.Join) 
0

如果你是執行HQL,你可以使用「左外連接獲取」或「左連接獲取」來加入你想要獲取的關聯,而不是延遲加載,例如

如果您有有一個屬性返回一個地址對象建築類這種關係是延遲加載,你可能必須HQL類似於:

string hql = "from Building bld where bld.Type.Id = 1"; 

當地址屬性是每個建築訪問另一個SQL語句將被執行。更改HQL到下面將獲取地址作爲原始SQL語句的一部分:

string hql = "from Building bld left outer join fetch bld.Address as addr where bld.Type.Id = 1";