将Linq中的FetchMany绑定到NHibernate

时间:2011-04-18 14:23:54

标签: nhibernate linq-to-nhibernate fetch eager-loading nhibernate-3

我正在使用FetchMany进行一些查询,NHibernate Profiler给出了以下错误:

  

WARN:
  FIRSTRESULT /的maxResults   使用collection fetch指定;   在记忆中应用!

我想这是因为获取是未绑定的。有解决方案吗?

1 个答案:

答案 0 :(得分:1)

出现此问题是因为使用FetchMany会将整个结果集带入内存,然后使用指定的子集(效率低且有潜在危险)。

显然,在使用FetchMany时,无法在获取之前限制子集。

解决方案是使用JoinQueryOverJoinAlias(在其他SO问题中已经讨论了两者的差异)

这样做了

Session.QueryOver<Product>().FetchMany(p=>p.Images).Take(5)

在问题中产生警告,我们

Image image = null;
Session.QueryOver<Product>().Left.JoinQueryOver(x => x.Images, () => image).Take(5)

生成SELECT TOP (5)查询