Nhibernate 如何在将子集合实体加入关联时立即获取子集合

Nhibernate 如何在将子集合实体加入关联时立即获取子集合,nhibernate,hql,icriteria,eager-loading,Nhibernate,Hql,Icriteria,Eager Loading,假设以下是虚构的布局 Dealership has many Cars has a Manufacturer 但结果查询看起来与我预期的完全不同。我开始认为某个地方可能需要一个分离的标准,但我不确定 想法?在同一个查询中获取集合几乎从来都不是最好的解决方案 此链接详细介绍了最佳方法之一: 就个人而言,我的首选解决方案是在集合和实体中使用批量大小,设置为默认页面长度的大小。这样,您的上述查询将使用3个便宜的、可单独缓存的查询来完成,而不是一个昂贵的查询。我应该提到,我们使用的是较旧的

假设以下是虚构的布局

Dealership has many Cars has a Manufacturer 但结果查询看起来与我预期的完全不同。我开始认为某个地方可能需要一个分离的标准,但我不确定


想法?

在同一个查询中获取集合几乎从来都不是最好的解决方案

此链接详细介绍了最佳方法之一:


就个人而言,我的首选解决方案是在集合和实体中使用
批量大小
,设置为默认页面长度的大小。这样,您的上述查询将使用3个便宜的、可单独缓存的查询来完成,而不是一个昂贵的查询。

我应该提到,我们使用的是较旧的Oracle,因此批量大小不起作用。此外,我也不想从经销商处获得两个集合。我希望汽车能很快地装载到它的制造商那里。您发送的链接更多地与单个根目录下的多个集合相关联。
batch size
对实体和集合适用于所有数据库。Ayende的解决方案适用于任何数量的集合;其思想是在一个查询中获取根,在另一个查询中获取集合。实际上,批量大小在Oracle 9i上不起作用。它仅添加到10+客户端。接受作为答案,因为您是正确的。。如果你有批量大小,这是正确的方法。。我想我应该考虑让我们的客户升级。

var dealershipQuery = Session.CreateCriteria< Dealership>("d")
                             .Add(Restrictions.InsenstiveLike("d.Name", "Foo"))
                             .CreateAlias("d.Cars", "c")
                             .SetFetchMode("d.Cars", FetchMode.Select)
                             .SetFetchMode("c.Manufacturer", FetchMode.Join)
                             .UniqueResult< Dealership>();