Comment pouvez-vous faire de pagination avec NHibernate?
Par exemple, je veux remplir un contrôle gridview dans une ASP.NET page web avec uniquement les données nécessaires pour le nombre de lignes affichées. Comment peut-NHibernate l'appui de cette?
Vous devez vous connecter pour publier un commentaire.
ICriteria
a unSetFirstResult(int i)
méthode, qui indique l'index du premier élément que vous souhaitez obtenir (essentiellement la première ligne de données dans votre page).Il dispose également d'un
SetMaxResults(int i)
méthode, qui indique le nombre de lignes que vous souhaitez obtenir (c'est à dire, la taille de vos pages).Par exemple, ce critère de l'objet obtient les 10 premiers résultats de votre grille de données:
Vous pouvez également profiter des contrats à Terme de fonctionnalité dans NHibernate pour exécuter la requête pour obtenir le total du nombre d'enregistrements ainsi que les résultats dans une seule requête.
Exemple
Pour obtenir le total du nombre d'enregistrement, vous effectuez les opérations suivantes:
Une bonne discussion de ce Terme vous donner est ici.
De NHibernate 3 et ci-dessus, vous pouvez utiliser
QueryOver<T>
:Vous pouvez également explicitement l'ordre de vos résultats comme ceci:
.Skip(PageNumber * PageSize)
de cette façon, si la taille de la page est de 10, il ne sera jamais à récupérer les 10 premières lignes. Je suis d'édition pour rendre la formule correcte. En supposant que sur le plan conceptuel,PageNumber
ne doit pas être 0. Il doit être au minimum de 1.Lors de la pagination de données est-il une autre façon d'obtenir tapé résultat de Multicritère ou tout le monde fait la même chose tout comme moi ?
Grâce
Comment au sujet de l'utilisation de Linq to NHibernate, comme discuté dans ce blog par Ayende?
Exemple De Code:
Et ici est détaillée poste par l'NHibernate blog de l'équipe sur Accès Aux Données Avec NHibernate y compris la mise en œuvre de la pagination.
Le plus probable dans un GridView vous voulez montrer une tranche de données, plus le nombre total de lignes (nombre de lignes) de la quantité totale de données qui correspondent à votre requête.
Vous devez utiliser un MultiQuery d'envoyer le Select count(*) et de requête .SetFirstResult(n).SetMaxResult(m) des requêtes sur votre base de données en un seul appel.
Note le résultat sera une liste qui contient 2 listes, une pour la tranche de données et une pour le comte.
Exemple:
Je vous suggère de créer une structure spécifique pour traiter avec la pagination. Quelque chose comme (je suis un programmeur Java, mais ça devrait être facile de la carte):
Je n'ai pas d'alimentation de mise en œuvre, mais vous pouvez utiliser les méthodes proposées par @Jon. Voici un bonne discussion pour vous de prendre un coup d'oeil.