我已经将此问题发布到nh组,但仍然没有得到答案,所以我在此处发布它。 我有一个小问题,急切地加载子集合并使用SetMaxresults获得正确的分页结果。DistinctRootEntityTransformer with SetMaxResults或N + 1 SELECT
比方说,我有一个简单的实体:
public class Post
{
int Id {get; set;}
Vote Votes {get; set;}
}
public class Vote
{
int Id {get; set;}
}
在开始的时候我做了一个投票收集延迟加载和它的工作很好除了N + 1 SELECT语句。
然后我试着急切地抓取'Votes'集合,它运行良好,但在数据库方面有重复(如果一个Post有3个投票,我们将在结果SQL查询中有3行)我使用了DistinctRootEntityTransformer,除了使用SetMaxResults。因为SetMaxResults限制了数据库端的结果,所以在应用DistinctRootEntityTransformer之后,我们在对象端的结果会更少。
我翻看博客文章,StackOverflow的问题,尝试了许多事情,如Fetch,LeftOuterJoins,子查询,分离标准,但没有找到我的问题的任何解决方案。这个问题也在这里描述http://www.interworks.com/blogs/banderton/2009/06/26/nhibernate-eager-loading-collections-rootentityresulttransformer-and-setm。
现在我看到三个解决方案,用setMaxResults获取不正确的结果数字,保留SELECT N + 1,或者在懒加载的“投票”集合上设置批量大小,这就是我所做的。最新的问题是,NHProf为批量选择产生“无限结果集”警报,因为它不是最优的。
也许我错过了一些东西。有没有解决方案可以正确解决?
由于提前,
这就是我所做的。我认为这是最好的解决方案,但NHProf为批量选择产生“无限结果集”警报,因为它不是最优的。我认为我们不能拥有所有的:)反正你的时间+1和确认我的发现:) – 2011-05-10 11:03:39