Entity Framework Tutorial Inclure plusieurs niveaux
Comment inclure plusieurs niveaux?
Le chargement rapide est le processus par lequel une requête pour un type d'entité charge également des entités associées dans le cadre de la requête. Un chargement rapide est obtenu en utilisant la méthode Include.
La méthode Include () fonctionne assez bien pour les listes d'objets, mais que se passe-t-il si plusieurs niveaux de profondeur sont nécessaires? Par exemple, le client contient une liste de factures et chaque facture contient ensuite une liste d'articles.
Questions relatives à StackOverflow
- Entity Framework - Inclure plusieurs niveaux de propriétés
- Requête linq de structure d'entité Inclure () plusieurs entités enfants
Réponse
Entity Framework 4.1 à 6
La méthode Include () permet de spécifier la profondeur de chargement désirée en fournissant des expressions Select à la profondeur appropriée.
Utiliser l'expression lambda
using (var context = new EntityContext()) { var customers = context.Customers .Include(i => i.Invoices.Select(it => it.Items)) .ToList(); }
L'exemple ci-dessus charge tous les clients, leurs factures associées et les postes de chaque facture.
Utilisation du chemin de chaîne
Chargez tous les clients, toutes leurs factures associées et tous les éléments de chaque facture en utilisant une chaîne pour spécifier les relations.
using (var context = new EntityContext()) { var customers = context.Customers .Include("Invoices.Items") .ToList(); }
Entity Framework Core
EF Core a une nouvelle méthode d'extension ThenInclude () . Vous pouvez explorer des relations pour inclure plusieurs niveaux de données liées à l'aide de la méthode ThenInclude.
using (var context = new MyContext()) { var customers = context.Customers .Include(i => i.Invoices) .ThenInclude(it => it.Items)) .ToList(); }