При использовании методов SetFirstResult(start)
и SetMaxResults(count)
для реализации подкачки я заметил, что сгенерированный запрос выполняет только select top count * from some_table
, и он не принимает параметр start
или, по крайней мере, не находится на уровне базы данных, Похоже, что если я поручу NHibernate выполнить следующий запрос:
var users = session.CreateCriteria<User>()
.SetFirstResult(100)
.SetMaxResults(5)
.List<User>();
105 записей будут проходить между сервером базы данных и приложением, которое позаботится о том, чтобы удалить первые 100 записей. С таблицами, содержащими много строк, это может быть проблемой.
Я подтвердил, что с базой данных SQLite NHibernate использует ключевые слова OFFSET
и LIMIT
для фильтрации результатов на уровень базы данных. Я знаю, что нет эквивалента ключевого слова OFFSET
и Oracle ROWNUM
в SQL Server 2000, но есть ли какое-либо обходное решение? Как насчет SQL Server 2005/2008?