nhibernate,急切的加载和分页

时间:2010-12-10 14:20:03

标签: nhibernate pagination eager-loading

我正在创建一个使用nhibernate和paging的mvc应用程序。我有一个父母>我试图加载我的孩子记录的孩子关系。这一切都很好。

我遇到的问题是分页。我想每页有15个项目。如果每个父母只有一个孩子,这种方法很有效。问题是父母有多于一个孩子。例如,如果父级有2个子记录,则数据库实际上选择15个记录,其中两个代表同一个父级,一个用于两个子级中的每一个。因此,在我的页面数据视图中,似乎只有14条记录。

有人知道如何在父母仍然渴望加载我的孩子实体的情况下如何通过父母获取我的页数吗? 这将是一个面向公众的网站,所以我认为延迟加载不是一个好主意,因为它会导致过多的服务器访问。

NHibernate中是否有内置的内容可以解决这个问题?

感谢您的任何想法。

3 个答案:

答案 0 :(得分:2)

您可以使用fetch="subselect"标记您的关联属性 - 这也可以确保您不会遇到大型笛卡尔产品的问题,但代价是为每个选择进行两次查询。

答案 1 :(得分:0)

您需要在查询中使用不同的根实体结果转换器。您还没有说过您是使用HQL还是Criteria,但两者的API类似。

// criteria
criteria.SetResultTransformer(Transformers.DistinctRootEntity)

这将强制结果集仅包含不同的父实体。

答案 2 :(得分:0)

在映射中使用batch-size提示进行子集合可能是处理此问题的最佳/最简单的方法。有关进一步的讨论,请参阅我对此similar question的回答。