2009-04-14 38 views
1

我有一個實體食譜,它有3個集合圖像,評論和成分。他們被映射爲一個袋子。Nhibernate - 不能在單個查詢中獲取多個集合

對於一個網站,我想加載與配方中的配方集合,即沒有延遲加載,所以我知道我能做到這一點使用此查詢:

from Recipe r 
left join fetch r.Images 
left join fetch r.Ingredients 
left join fetch r.Comments 

但是,這給出了一個例外:

不能在單個查詢中獲取多個集合,如果其中一人是 袋

所以,我怎麼就沒有延遲加載我食譜並加載集合,以允許該集合中可能沒有任何行的事實?我是新手,需要解釋。

回答

0

將集合映射爲集合。

包是一個可以包含同一物品的多個副本的集合。

1

更改爲套件將允許這樣做,但是您確定這是您想要做的嗎?

'以這種方式獲取多個子集合可能對您的系統性能非常不利。你可以很容易地得到一個笛卡爾積,從數據庫中獲取你需要的行數的許多倍。

Ayende點出潛在的問題here

你可能想看看session.CreateMultiQuery()session.CreateMultiCriteria()代替。

1

避免笛卡兒查詢。我會使用futures和left outer join來執行3個查詢。