2009-09-17 32 views
0

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

1

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.

+0

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. –

+0

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. –

+0

En toute justice, il est difficile de dire pourquoi une requête se comporte comme elle le fait sans voir la requête. :) –

0

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.

Questions connexes