使用Take()
加入时出现了一些奇怪的行为。假设以下示例:
Comment comment = null;
var persons = _repository
.QueryOver()
.Left.JoinAlias(x => x.Comments, () => comment)
.Where(x => x.Age > 20)
.Take(5)
.Future()
.ToList();
我希望数组中有5
个人,每个人都有一个N comments
列表。
但是,结果会给5
个人提供最多5
个评论。
为什么.Take(5)
也会限制评论数量?
如何达到预期效果?
答案 0 :(得分:2)
这里的要点是我们对分页及其实现的需求的差异。
在此问答中可以找到一些线索。答:NHibernate QueryOver with Fetch resulting multiple sql queries and db hits
如果使用SQL Server 2012 dialect进行分页,我们会看到这样的SQL:
SELECT ...
FROM root
JOIN collection
WHERE....
OFFSET 0 ROWS -- skip 0 or 10 or 20 rows
FETCH NEXT 5 ROWS ONLY; -- take 5 rows
因此,如果chidren(注释)的数量为5 +
,最终会导致返回一个根实体解决方案?我建议你这样做:
只选择root,也可以选择任意多对一/参考。这将以星型模式结构结束,左连接将再次正确地覆盖根实体。
批量提取在doc:
中描述一些类似的问题: