2013-08-27 31 views
0

我有一系列映射到它們各自的數據庫對象的類。如何使用nHibernate中的FetchMode獲取單層關聯表

在映射中,設置獲取模式以便關聯的查找與父記錄一起加載。

我現在正在引用這些對象中的一些,因此我顯然獲得了熱切加載的關聯記錄。

如果可能的話,我不想使用延遲加載,因爲我從服務層傳遞這些對象 - 並不理想,但我希望我可以在查詢級別處理這個問題。

拿這個例子:

var c = s.CreateCriteria(typeof(Transaction)) 
         .Add(Restrictions.Eq("Id", myId)) 
         .SetFetchMode("Remark", FetchMode.Join) 
         .SetFetchMode("Category", FetchMode.Join) 
         .SetFetchMode("Reason", FetchMode.Join); 

var t = c.List<Transaction>().FirstOrDefault(); 

備註有許多與其相關的記錄,這些都是目前正在加載當我運行此查詢。

你可以修改ICriteria以防止參考實體加載它們的關聯嗎?

在這個例子中,我只希望Transction及其直接相關的備註,類別和原因

感謝

+0

根據此http: //stackoverflow.com/q/3199032/1236044使用別名,我想你可能會嘗試重寫從Eager到Lazy的兒童屬性的FetchMode。可能有很多屬性可以覆蓋... – jbl

+0

我認爲將lazy和fetch單獨放在映射中通常會更好,並且在查詢級別處理它們 - 就像您試圖做。我認爲只要這樣設置映射,你就不會這樣做。 –

回答

0

在我的頭頂,應該

var c = s.CreateCriteria(typeof(Transaction)) 
        .Add(Restrictions.Eq("Id", myId)) 
        .CreateAlias("Remark", "remark")) 
        .SetFetchMode("remark.Collection", FetchMode.Lazy); 
+0

使用這種技術時,被引用的對象在被訪問時仍然被提取。是否有一個'FetchMode'或者equiv只會在我提問時提取? – sambomartin

+0

我不知道我明白。提取備註或收集問題?訪問一個對象是要求它自己初始化。否則它會被打破。 – Firo

相關問題