À l'aide de EF Core ThenInclude() sur la Jonction des tables
Je suis le transfert de mes .NET Framework (EF6) code de ASP.NET de Base (EF de Base), et je suis tombé sur cette question. Voici un exemple de code:
Dans EF6-je utiliser include() et Sélectionnez() pour impatient de chargement:
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthor est une table de jonction et il y a aussi une table de Jonction "AuthorInterest" que je n'ai pas besoin de les impliquer dans EF6 (Select va droit à un.Les intérêts).
De toute façon, je peux voir que dans EF7 c'est retravaillée, ce qui signifie que je devrais utiliser ThenInclude() pour les requêtes imbriquées maintenant. Cependant...
return _context.Post
.Include(p => p.PostAuthor)
.ThenInclude(pa => pa.Select(pa2 => pa2.Author))
...etc
Le code ci-dessus échoue à cause de la Sélectionner() instruction. La documentation sur https://docs.efproject.net/en/latest/querying/related-data.html semble suggérer que je n'ai pas besoin, et je peux accéder à l'Auteur immédiatement, mais j'obtiens une ICollection dans la dernière lambda affiché, donc j'ai évidemment besoin de Sélectionner(). - Je aller à travers de multiples jonction des tables plus loin, dans la requête, mais pour des raisons de simplicité, nous allons concentrer sur la première.
Comment puis-je faire ce travail?
Vous devez vous connecter pour publier un commentaire.
Non, vous ne le font pas. EF Core
Include
/ThenInclude
à remplacer totalement le besoin deSelect
/SelectMany
utilisé dans EF6. Les deux ils ont séparé les surcharges pour la collecte et le type de référence propriétés de navigation. Si vous utilisez la surcharge, la collecte,ThenInclude
fonctionne sur le type de la collection élément, donc à la fin vous vous retrouvez toujours avec un seul type d'entité.Dans votre cas,
pa
doit résoudre votre table de jonction type d'élément, de sorteAuthor
devraient être directement accessibles.Par exemple le EF6 inclure la chaîne:
se traduit par EF de Base:
db.Parents.Include(p => p.Children).ThenInclude(c => c.Child).ThenInclude(c => c.Parents)
je me Intellisense soutien à chaque lambda.