分页时,NHibernate会遍历太多列

时间:2011-03-28 13:58:39

标签: sql-server-2005 nhibernate paging nhibernate-projections

我们有一个持久性实体,我们在其上为网格显示做一些分页。该实体具有映射在计算列上的一组属性。我们强制NH只使用Projections检索一小组列。我们从一个检索所有列的查询开始,现在我们有一个只检索8列的查询。但是我们仍然有一个计算列的问题。它包含在分页选择中:

SELECT TOP 10 y0_, y1_
FROM (
     SELECT this_.[ID] as y0_, this_.[Calculated_Column] as y1_, ROW_NUMBER() OVER(ORDER BY this_.[ID]) as __hibernate_sort_row 
     FROM [dbo].[TABLE] this_  
     WHERE this_.[IS_ACTIVE] = 1 
     ) as query 
WHERE query.__hibernate_sort_row > 21110 ORDER BY query.__hibernate_sort_row

由于Calculated_Column,内部选择大约需要15秒,因为它遍历第一个21110行并检索该列。当然,计算出的列可能会有所改进,但我正在尝试使NHibernate生成一个内部选择,它只检索页面的id而不是使它变得如此慢的补充列。

有没有办法做到这一点?或者我是否必须首先检索ID,然后返回数据库以检索必要的列,但仅针对先前检索的ID?

稍后修改

使用的查询非常简单:

Session.GetISession().CreateCriteria(typeof(Table)).
  SetFirstResult(startRowIndex).SetMaxResults(maximumRows).
  SetProjection(Projections.ProjectionList().
    Add(Projections.Property("Id"), "Id").
    Add(Projections.Property("CalculatedColumn"), "CalculatedColumn")).
  SetResultTransformer(Transformers.AliasToBean(typeof(Table)))

0 个答案:

没有答案