Nhibernate - 无法在单个查询中获取多个集合

时间:2009-04-14 13:11:32

标签: nhibernate

我有一个实体食谱,它有3个集合图像,评论和成分。它们被映射为一个包。

对于一个网站,我想用配方加载配方集合,即不是延迟加载,所以我发现我可以使用这个查询来做到这一点:

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

但是这给了一个例外:

  

如果其中一个是,则无法在单个查询中获取多个集合   一个包

那么我怎么不懒加载我的食谱并加载集合允许该集合中可能没有任何行?我是新手,需要解释。

3 个答案:

答案 0 :(得分:1)

更改为集合将允许此操作,但您确定这是您想要做的吗?

以这种方式“获取”多个子集合可能对您的系统性能非常不利。您可以很容易地得到一个笛卡尔积,从数据库中获取所需行数的许多倍。

Ayende指出潜在的问题here

您可能希望改为session.CreateMultiQuery()session.CreateMultiCriteria()

答案 1 :(得分:1)

避免笛卡尔查询。我将使用期货和左外连接执行3个查询。

答案 2 :(得分:0)

将集合映射为一组。

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