Entity Framework, et le piège du Lazy Loading

Au début de l’année (voir aussi cet article), nous avons mis en place une nouvelle architecture basée sur Entity Framework Code First pour sa DAL et cela m’a permis de constater une chose assez dérangeante concernant le Lazy Loading, et à laquelle il vaut mieux prêter attention.

Par défaut, le Lazy Loading est activé sur Entity Framework.

Cela est assez vicieux car on peut sans se rendre compte, implémenter sa fonctionnalité, penser que tout fonctionne, mais en fait, on fait des requêtes non maîtrisées en base de données. Ce qui conduit généralement à un Select N+1 Le problème Cela peut se montrer en générant des relations parent-enfant multiples. Prenons par exemple, une classe library qui possède une collection de livres LibraryClass Voici la classe Book BookClass Un petit peu de code Controller + View pour obtenir ce rendu de démo LibraryWithItsBooks Et voici le problème, on se retrouve avec N+1 requête. La première sert à récupérer les librairies, et ensuite, pour chaque librairie, on fait une requête qui récupère l’ensemble des livres. LibraryWithItsBooksQueries  La solution Afin d’éviter le problème, on peut désactiver la configuration par défaut du Lazy Loading dans Entity Framework LibraryConstructorParam Enfin, il faut ajouter un include dans la requête pour aller chercher les Book en même temps que les Library LibraryIncludeBooks

Advertisements

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