NHibernate获取返回错误的行计数

时间:2012-07-27 19:29:49

标签: nhibernate

我在项目中设置了一个API,用于调用网格以获取审核记录以显示给管理员。网格具有无限滚动设置并使用内置于mvc4中的oData。因此,它将调用api,其中$ top等于它应该获得的行数,并且$ skip设置为到达正确的页面。

在API中,我调用nhibernate来获取一个IQueryable来返回MVC4来做它的暗oData魔术:

m_session.Query<AuditInfo>().FetchMany(x => x.Parameters).Fetch(x => x.AuditType).Fetch(x => x.Status)

在此,AuditInfo有一组挂起的参数,以及类型和状态的查找表。

我的问题是,如果我要求30行,它将返回一些数字&lt; = 30.我已经能够跟踪这一点,问题似乎是nhibernate有{{1}同一查询中的{}和TOP语句,因此当审计有多个参数时,它会创建审计副本以保存第二个参数以便返回它。这样做会占用查询允许的TOP(30)中的空格。然后,当它回到nhibernate时,它似乎合并了这些行,留下了一个记录少于我想要的集合。

我的问题是:如何设置此调用以便我可以获得准确数量的记录而无需单独获取参数并进行n + 1次查询?

1 个答案:

答案 0 :(得分:1)

基本上你不能轻易,因为这就是sql的工作原理。省略FetchMany,它应该使用Select N + 1。为了弥补这一点,您可以调整集合批量大小,以便NH一次加载多个相同类型的集合。