NHibernate переходит слишком много столбцов при поиске - PullRequest
1 голос
/ 28 марта 2011

У нас есть постоянная сущность, для которой мы делаем пейджинг для отображения сетки.У сущности есть набор свойств, сопоставленных с вычисляемыми столбцами.Мы заставили NH получить только небольшой набор столбцов с помощью проекций.Мы начали с запроса, который извлекал все столбцы, и теперь у нас есть запрос, который извлекает только 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 генерировать внутренний выбор, который извлекает только идентификаторы страницы, а не дополнительные столбцы, которые делают его таким медленным.

Есть ли способсделай это?Или мне нужно сначала получить идентификаторы, а затем вернуться в базу данных для получения необходимых столбцов, но только для ранее полученных идентификаторов?

Позднее редактирование

Используемый запрос довольно прост:

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)))
...