Linq-to-entity - La méthode Include () ne se charge pas

entity-framework linq

Question

Si j'utilise une jointure, la méthode Include () ne fonctionne plus, par exemple:

from e in dc.Entities.Include("Properties")
join i in dc.Items on e.ID equals i.Member.ID
where (i.Collection.ID == collectionID) 
select e

e.Properties n'est pas chargé

Sans la jointure, l'include () fonctionne

Lee

Réponse acceptée

MISE À JOUR: En fait, j'ai récemment ajouté un autre conseil qui couvre cette question et fournit une solution de rechange probablement meilleure. L'idée est de retarder l'utilisation de Include () jusqu'à la fin de la requête. Pour plus d'informations, consultez la section suivante: Astuce 22 - Comment faire d'inclure vraiment


Il existe une limitation connue dans Entity Framework lors de l'utilisation de Include (). Certaines opérations ne sont tout simplement pas prises en charge avec Include.

On dirait que vous avez peut-être rencontré l'une de ces limitations. Pour contourner ce problème, vous devriez essayer quelque chose comme ceci:

var results = 
   from e in dc.Entities //Notice no include
   join i in dc.Items on e.ID equals i.Member.ID
   where (i.Collection.ID == collectionID) 
   select new {Entity = e, Properties = e.Properties};

Cela ramènera les propriétés, et si la relation entre entité et propriétés est un à plusieurs (mais pas plusieurs à plusieurs), vous constaterez que chaque type anonyme résultant a les mêmes valeurs dans:

anonType.Entity.Properties
anonType.Properties

Il s'agit d'un effet secondaire d'une fonctionnalité dans Entity Framework appelée correction de relation.

Consultez cette astuce 1 de la série EF Tips pour plus d'informations.


Réponse populaire

Essaye ça:

var query = (ObjectQuery<Entities>)(from e in dc.Entities
            join i in dc.Items on e.ID equals i.Member.ID
            where (i.Collection.ID == collectionID) 
            select e)

return query.Include("Properties") 


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow