Query paging with Entity Framework

Voici une librairie que j’ai découverte
récemment pour faire du paging avec Entity Framework. Auparavant j’avais choisi d’implémenter manuellement ma pagination mais mon code serveur exposait une Web API. Actuellement, je suis dans un cas où je veux paginer une liste dans un site web asp.net MVC. C’est là que cette librairie devient très utile.

Dans la suite, je vous montre la solution que j’ai implémentée pour l’API web à l’époque, le besoin différent dans le cas MVC, et comment cette librairie y répond.

book pages

Le cas de l’exposition via une API web

Voici ci-dessous comment j’ai choisi d’implémenter le paging dans l’abstract repository:ManualPaging

L’idée est d’utiliser un Skip et un Take sur un IQueryable générique. Ce repository est ensuite exposé via des services métier qui sont à leur tour exposés dans une API Web. Soit, ça fonctionne très bien et le client Javascript, en l’occurrence une SPA, gère son paging côté client et passe la page et le nombre d’objets souhaités via ces appels à l’API.

Le cas d’ASP.Net MVC

Dans mon application web basée sur asp.net MVC 5, j’ai besoin d’afficher un tableau contenant une liste d’objets, et que cette liste soit paginée.

Mon besoin est:

  1. Paginer l’affichage, afin de donner un rendu ne dépassant pas la taille de la hauteur d’un écran
  2. Paginer les requêtes effectuées en base de données afin que ce soit pas juste un fake d’affichage, mais aussi une bonne pratique de performances quand mes volumes de données seront élevés

La bonne nouvelle, c’est que la lib PagedList fait tout cela 🙂

elle fournit un helper razor html.pageList() RazorHtmlPager qui donne une pagination bien sympa. Les styles CSS sont livrés avec.

PagingRendered

Le CSS du pager

Et enfin, on voit ici avec le profiler que les requêtes prennent bien en compte la pagination avec un SELECT TOP ainsi qu’une utilisation du ROWNUMBER. Ci-dessous, j’ai fait des pages de 3 livres, et je clique la 2ème page: je sélectionne donc le TOP 3 à partir de la 4ème ligne:

PagerSelectTOP

PagerRowNumber

Voici les liens:

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s