我正在使用FetchMany进行一些查询,NHibernate Profiler给出了以下错误:
WARN:
FIRSTRESULT /的maxResults 使用collection fetch指定; 在记忆中应用!
我想这是因为获取是未绑定的。有解决方案吗?
答案 0 :(得分:1)
出现此问题是因为使用FetchMany
会将整个结果集带入内存,然后使用指定的子集(效率低且有潜在危险)。
显然,在使用FetchMany
时,无法在获取之前限制子集。
解决方案是使用JoinQueryOver
或JoinAlias
(在其他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)
查询