2009-03-17 5 views
3

J'utilise nHibernate et j'essaie d'implémenter certains pagination. Si je cours ce codenHibernate SetFirstResult & SetMaxResults Problèmes

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

il renvoie 8 enregistrements. Si je cours ce code si

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

il renvoie 0 enregistrements. Quand je regarde le SQL généré, je ne vois pas qu'il y a une logique de pagination.

Quelles sont les erreurs les plus probables avec ceci?

Répondre

1

Vous avez la syntaxe correcte, donc tant qu'il y a des données dans cette table, je ne sais pas pourquoi il retournera 0 résultats.

En ce qui concerne le SQL généré, MSSQL Server ne prend pas en charge les commandes LIMIT et OFFSET, de sorte que la pagination ne peut pas être implémentée de cette manière sur le serveur. (Ma compréhension est que SQL Server 2005 a amélioré les méthodes de pagination, mais ne supporte pas encore LIMIT ou OFFSET) Donc, avec SQL 2000, toutes les lignes doivent être récupérées, puis le sous-ensemble sélectionné à partir de ce jeu de résultats.

La seule autre chose que je peux suggérer est de vérifier que votre requête est dans une transaction séparée. J'ai vu des messages qui suggèrent que cela pourrait aider. Il peut y avoir quelque chose parce que mes tests unitaires avec SetFirstResult/SetMaxResults ont réussi.

3

Je ne suis pas sûr de NHibernate, mais en Java, l'index de résultat est basé sur 0. Essayez d'appeler .SetFirstResult (0) au lieu de .SetFirstResult (1), sinon s'il n'y a qu'une seule ligne, il retournera 0 résultats. On dirait que vous avez 8 lignes, cependant, je ne sais pas pourquoi vous n'obtiendrez pas de résultats dans tous les cas.

0

Peut-être vérifier votre Dialecte et fournisseur de connexion dans web.config ou 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> 
Questions connexes