J'ai un objet complexe et lorsque j'utilise une requête linq sans la syntaxe Include, je récupère toutes les entités liées dans mon graphe d'objets. Que peut-on expliquer?Linq to Entities - Eager Chargement
Répondre
Vous n'êtes pas vraiment. Linq charge les objets comme vous en avez besoin, mais il le fait de façon transparente dès que vous commencez à parcourir les objets (soit dans le code ou dans une montre de débogueur) il les charge donc il semble que vous les ayez tous déjà. Si vous exécutez la requête, puis supprimez la connexion à la base de données, vous obtiendrez des exceptions de base de données lorsque vous essayez de parcourir les objets car il sera impossible de les charger.
Éditer: Désolé, j'ai mal lu la question. Linq-to-entities ne supporte pas le chargement paresseux (voir le commentaire de Craig ci-dessous). Pour obtenir le graphique de l'objet complet, vous devez utiliser "Inclure" dans la requête Linq ou appeler Load() sur chaque référence. Désolé, je ne peux pas expliquer le comportement décrit dans la question. Pouvez-vous donner plus de détails. Peut-être poster votre requête et le code.
Peut-être que vous utilisez Entity Framework 4 et le chargement paresseux est activé. Vous pouvez vérifier la propriété ObjectContextOptions.LazyLoadingEnabled dans votre contexte. Bien que la propriété soit "false" par défaut, les outils de génération de modèle la définissent normalement sur "true". Vérifiez le MSDN article on Loading Related Objects - la section sur le chargement paresseux explique ceci.
- 1. Désireuse chargement et LINQ to Entities
- 2. Linq to Entities System.data.Objects
- 3. LINQ to Entities
- 4. LINQ to Entities
- 5. LINQ to Entities requêtes Oddity
- 6. OnValidate() et LINQ to Entities
- 7. Linq to Entities et propriétés concaténées
- 8. LINQ to Entities et Xml Les champs
- 9. Problème avec LINQ to Entities et String.StartsWith
- 10. Clause "NOT IN" dans LINQ to Entities
- 11. Dois-je considérer LINQ to Entities?
- 12. Linq To Entities Générer de grandes requêtes
- 13. Optimize Grouper par dans LINQ to Entities
- 14. dates distinctes dans LINQ To Entities?
- 15. LINQ to Entities pour soustraire 2 dates
- 16. LINQ to Entities: Les expressions lambda
- 17. Jointure externe gauche dans Linq-To-Entities
- 18. Linq to Sql Chargement différé
- 19. Pourquoi ASP.NET MVC sélectionne-t-il Linq to SQL sur LINQ to Entities?
- 20. Est-ce que LINQ to Entities réutilise des instances d'objets?
- 21. Linq to Entities Filtrage d'une entité dynamique/fortement typée
- 22. Comment utiliser flags enums dans les requêtes Linq to Entities?
- 23. Linq to Entities requête frappant deux fois db
- 24. LINQ to Entities sur (base de données! = Microsoft SQL Server)
- 25. LINQ to Entities: requête avec quatre tables REJOIGNEZ
- 26. Linq to Entities - Supprimer d'un lien/table de jonction
- 27. Visualiser le SQL généré à partir de Linq To Entities
- 28. Linq to Entities jointures excessives dans le code SQL généré
- 29. LINQ to Entities: Faire la requête en face
- 30. Linq to Entities Vs. Adaptateurs de table (Windows Forms Windows)
Cette réponse se lit comme si LINQ to Entities effectuait un chargement paresseux. Peut-être que ce n'est pas ce qui était prévu, mais c'est comme ça que j'ai lu le texte ici. En fait, LINQ to Entities ne fait pas de chargement paresseux (sauf si vous utilisez la version 4 et que vous l'activez spécifiquement). Il est difficile de dire plus sans voir la requête réelle. –
Ahh. Bon point, je viens de voir Linq et pensé Linq-to-SQL (qui fonctionne comme décrit dans ma réponse). Oui, vous avez raison Craig, Linq to Entities ne fait pas de chargement paresseux. Vous devez soit utiliser "Include" ou appeler Load() sur les références. Dans ce cas, je ne peux pas expliquer le comportement décrit dans la Question. –
En toute justice, il est difficile de dire pourquoi une requête se comporte comme elle le fait sans voir la requête. :) –