Entity Framework – Inclure dans la sous-requête?

Je ne sais pas si on a déjà répondu à cette question. J’ai regardé quelques questions, mais je ne pense pas qu’elles étaient tout à fait ce que je voulais.

Disons que j’ai 3 tables:

Restaurant 1.....M MenuCategory 1.....M MenuItem 

J’ai une requête L2E qui ressemble à ceci:

 Restaurant = context.Restaurant .Include(r => r.MenuCategory) .FirstOrDefault(r => r.RestaurantId == resaurantId); 

Ce qui fonctionne dans une certaine mesure, mais il ne fait que précharger les catégories de menus.

En tant que solution de contournement, je peux parcourir chaque catégorie et appeler .Load (), mais cela impliquera de toucher beaucoup plus que ce dont je devrais théoriquement avoir besoin.

Ce que je veux vraiment pouvoir faire, c’est quelque chose comme:

 Restaurant = context.Restaurant .Include(r => r.MenuCategory) .Include(r => r.MenuCategory.MenuItems) .FirstOrDefault(r => r.RestaurantId == resaurantId); 

Mais clairement ce n’est pas disponible car r.MenuCategory est un énumérable

RÉPONSE 1:

context.Restaurant.Include (“MenuCategory.MenuItems”);

  • Cela fonctionne, mais ce n’est pas fortement typé. Je me demande si quelqu’un est capable de proposer une deuxième réponse fortement typée (je peux passer à une autre question, car celle-ci a été répondue et a bien répondu.)

J’ai déplacé ceci à une autre question car j’estimais qu’il était injuste d’enlever une réponse parfaite et qui fonctionne exactement comme il se doit:

Entity Framework – Inclure dans la sous-requête? – Partie 2

Ce lien ici semble résoudre votre problème?

 var result = context.Restaurant.Include("MenuCategory.MenuItems"); 

Vous pouvez toujours utiliser la version fortement typée pour le faire. Il suffit d’utiliser:

  Restaurant = context.Restaurant .Include(r => r.MenuCategory.Select(m => m.MenuItems)) .FirstOrDefault(r => r.RestaurantId == resaurantId);