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