2009-03-17 5 views
3

Я использую nHibernate и пытаюсь реализовать некоторые подкачки. Если я запустил этот кодnHibernate SetFirstResult & SetMaxResults Проблемы

IList list = session.CreateQuery("FROM Author").List(); 

он возвращает 8 записей. Если я запускаю этот код, то

IList list = session.CreateQuery("FROM Author") 
    .SetFirstResult(1).SetMaxResults(5).List(); 

он возвращает 0 записей. Когда я смотрю на сгенерированный SQL, я не вижу, что существует логика подкачки.

Каковы наиболее вероятные ошибки с этим?

ответ

1

У вас есть синтаксис правильный, так как есть данные в этой таблице, я не уверен, почему он вернет 0 результатов.

Что касается сгенерированного SQL, MSSQL Server не поддерживает команды LIMIT и OFFSET, поэтому подкачка не может быть реализована таким образом на сервере. (n.b. Я понимаю, что SQL Server 2005 улучшил методы подкачки, но все еще не поддерживает LIMIT или OFFSET). Таким образом, с SQL 2000 все строки должны быть извлечены, а затем подмножество, выбранное из этого набора результатов.

Единственное, что я могу предложить, это проверить, что ваш запрос находится в отдельной транзакции. Я видел сообщения, которые подсказывают, что это может помочь. Это может быть что-то, потому что мои тесты с помощью SetFirstResult/SetMaxResults успешны.

3

Я не уверен в NHibernate, но в Java индекс результата основан на 0. Попробуйте вызвать .SetFirstResult (0) вместо .SetFirstResult (1), иначе, если есть только одна строка, он вернет 0 результатов. Похоже, у вас есть 8 строк, поэтому я не знаю, почему вы не получите каких-либо результатов в любом случае.

0

Может проверить Диалект и поставщик соединения в web.config или app.config

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
Смежные вопросы