nHibernate SetFirstResult & SetMaxResults Проблемы - PullRequest
3 голосов
/ 17 марта 2009

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 04 сентября 2009

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

1 голос
/ 17 марта 2009

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

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

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

0 голосов
/ 12 ноября 2009

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