【问题标题】:Why Fetch should be the last clause in Linq Nhibernate query为什么 Fetch 应该是 Linq Nhibernate 查询中的最后一个子句
【发布时间】:2010-12-28 22:14:19
【问题描述】:

Fetch 应该是基于 Mike Hadlow 的 blog post 的 Linq 中的最后一个子句:

注意,如果你想混合 Fetch 与其他子句一起,Fetch 必须始终 最后一个。

那么,如果 Fetch 只是指示属性的获取策略,为什么在 Fetch 之后不能有更多子句? H

我遇到的一个问题是将 AsPagination (MVCContrib) 与 Fetch 一起使用。因为 AsPagination 试图通过在末尾添加 .Count() 来获取具有 Fetch 的查询的计数。

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

【问题讨论】:

    标签: linq nhibernate pagination mvccontrib fetch


    【解决方案1】:

    在我意识到发生了什么之前,我遇到了同样的问题。 http://groups.google.com/group/nhibernate-development/browse_thread/thread/b44957841c9416ba

    最可能的原因是这种方式更容易实现,因为不需要考虑查询中可能发生的转换(选择/分组依据)。

    当您的实体具有关联的集合时,NHibernate 在创建分页查询方面一直很困难。如果您使用 Criteria 或 QueryOver,正确的方法是让分页查询仅返回具有 Distinct 投影的实体的 ID。这些 id 将用于包含所有连接的子查询的 where 条件中。

    你可以在这里看到一个例子(答案):

    NHibernate paging criteria with fetchmode eager. (using fluent NH)

    我还没有在 Nhibernate LINQ 中尝试过这种技术,但它可能会起作用。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2013-01-27
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多