2010-12-22 46 views
2

我只是想讓我的頭繞着nHibernate並有一個查詢。當設置映射文件(使用Fluent或常規.hbm.xml文件)時,您指定了關係(包;一對多等)和子類型 - 想法是(我相信)是當您獲取對象它也提取和匹配數據。我的問題是我可以編程告訴我的查詢忽略這種關係?以編程方式忽略nHibernate的兒童

所以,下面有一個帶有Bar對象列表的Foo類。在映射文件中,這將是一對多的關係,有時我想用所有酒吧檢索Foo,但有時我想僅僅檢索沒有酒吧的Foo對象,這是出於性能原因。我怎樣才能做到這一點?

public class Foo { public int Id { get; set; } public List<Bar> { get; set; } } 
public class Bar { public int Id { get; set; } 

乾杯

回答

2

的關係應,除非你關閉延遲加載或指定它是急於裝在查詢不被自動加載。

編輯:

要回答你在下面的評論的問題。

1)它是作爲查詢的一部分完成的。在NHibernate的3.0使用QueryOver一個基本的例子看起來是這樣的:

var result = Session.QueryOver() 
        .Fetch(x => x.Category).Eager 
        .Where(x => x.Price > 10) 
        .List();

我想用的ICriteria它的 「調用setFetchMode(」 類別 「FetchMode.Eager)」

2)如果關閉延遲加載在一個對象的映射中,它總是會被有效地加載。爲了避免加載大量數據鏈或加載實際不需要的數據,我建議您儘量加載逐個查詢。

+0

好吧歡呼,東西彈出兩個問題:1)在查詢中指定加載是通過NHibernateUtils.Initilize方法? 2)我可以指定每個對象的預先加載還是一次指定爲整個對象指定?理想情況下,這是一種情況,我選擇我想要加載的項目 – johnnyboy 2010-12-23 04:05:09