为什么在Linq Nhibernate查询中Fetch应该是最后一条语句

3

根据Mike Hadlow的博客文章,基于Linq的Fetch应该是查询语句中的最后一个子句:

请注意,如果您想将Fetch与其他子句混合使用,则Fetch必须始终位于最后。

那么,如果Fetch仅表示属性的提取策略,为什么我不能在Fetch之后添加更多子句?

我遇到问题的一个情况是在使用AsPagination(MVCContrib)和Fetch时。因为AsPagination正在尝试通过在末尾添加.Count()来获取具有Fetch的查询的计数。

所以,为什么属性的提取策略应该是Linq Nhibernate查询语句中的最后一个子句?

1个回答

2
我之前遇到了同样的问题,在意识到发生了什么之前。最有可能的原因是这种实现方式更容易,因为不需要考虑可能发生的查询转换(select/group by)。
在创建带有关联集合的实体的分页查询方面,NHibernate一直很困难。如果您使用Criteria或QueryOver,则正确的方法是使分页查询仅返回具有Distinct投影的实体的ID。这些ID将用于子查询的where条件中,该子查询将包含所有连接。
您可以在这里看到一个例子(答案): NHibernate paging criteria with fetchmode eager. (using fluent NH) 我还没有在Nhibernate LINQ中尝试过这种技术,但它可能有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接