Que fait Include () dans LINQ?

J’ai essayé de faire beaucoup de recherches, mais je suis plutôt un db – donc même l’explication dans MSDN n’a aucun sens pour moi. Quelqu’un peut-il s’il vous plaît expliquer, et fournir des exemples sur ce que l’instruction Include() fait dans le terme de requête SQL ?

Disons par exemple que vous souhaitez obtenir une liste de tous vos clients:

 var customers = context.Customers.ToList(); 

Et supposons que chaque object Customer a une référence à son ensemble de Orders et que chaque Order a des références à LineItems qui peuvent également référencer un Product .

Comme vous pouvez le constater, la sélection d’un object de niveau supérieur avec de nombreuses entités associées peut entraîner une requête devant extraire des données de nombreuses sources. En tant que mesure de performance, Include() vous permet d’indiquer quelles entités liées doivent être lues dans la firebase database dans le cadre de la même requête.

En utilisant le même exemple, cela peut inclure tous les en-têtes de commande associés, mais aucun des autres enregistrements:

 var customersWithOrderDetail = context.Customers.Include("Orders").ToList(); 

En tant que dernier sharepointpuis que vous avez demandé SQL, la première instruction sans Include() pourrait générer une déclaration simple:

 SELECT * FROM Customers; 

La déclaration finale qui appelle Include("Orders") peut ressembler à ceci:

 SELECT * FROM Customers JOIN Orders ON Customers.Id = Orders.CustomerId; 

Je voulais juste append que “Include” fait partie du chargement rapide. Il est décrit dans le didacticiel Entity Framework 6 de Microsoft. Voici le lien: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the- -entity-framework-in-an-asp-net-mvc-application


Extrait de la page liée:

Entity Framework peut charger les données associées dans les propriétés de navigation d’une entité de plusieurs manières:

Chargement paresseux. Lors de la première lecture de l’entité, les données associées ne sont pas récupérées. Cependant, la première fois que vous tentez d’accéder à une propriété de navigation, les données requirejses pour cette propriété de navigation sont automatiquement récupérées. Cela entraîne l’envoi de plusieurs requêtes à la firebase database – une pour l’entité elle-même et une pour chaque fois que des données associées à l’entité doivent être extraites. La classe DbContext active le chargement paresseux par défaut.

Chargement rapide Lorsque l’entité est lue, les données associées sont récupérées avec elle. Cela se traduit généralement par une requête de jointure unique qui récupère toutes les données nécessaires. Vous spécifiez un chargement rapide à l’aide de la méthode Include .

Chargement explicite Ceci est similaire au chargement différé, sauf que vous récupérez explicitement les données associées dans le code; cela ne se produit pas automatiquement lorsque vous accédez à une propriété de navigation. Vous chargez les données associées manuellement en obtenant l’entrée du gestionnaire d’état de l’object pour une entité et en appelant la méthode Collection.Load pour les collections ou la méthode Reference.Load pour les propriétés qui contiennent une seule entité. (Dans l’exemple suivant, si vous souhaitez charger la propriété de navigation Administrator, vous devez remplacer Collection(x => x.Courses) par Reference(x => x.Administrator) .) En règle générale, vous ne devez utiliser un chargement explicite que lorsque vous êtes devenu paresseux.

Comme ils ne récupèrent pas immédiatement les valeurs de propriété, le chargement différé et le chargement explicite sont également connus sous le nom de chargement différé.

Pensez-y comme imposant Eager-Loading dans un scénario où vos sous-éléments seraient autrement paresseux.

L’EF de requête envoyé à la firebase database donnera un résultat plus important au début, mais lors de l’access, aucune requête de suivi ne sera effectuée lors de l’access aux éléments inclus.

D’autre part, sans elle, EF exécutera des requêtes séparées plus tard, lorsque vous accédez pour la première fois aux sous-éléments.