Maison >développement back-end >C++ >Comment charger avec impatience des entités liées avec une clause WHERE dans le cadre d'entité?
Chargement efficace des données connexes avec le filtrage dans le cadre d'entité
Cet article relève le défi de charger avec impatience des entités liées tout en appliquant des conditions de filtrage dans le cadre d'entité. L'approche optimale dépend de votre version EF.
Framework de l'entité 6 Solution
EF6 repose sur le chargement impatient et la fixation des relations. Cependant, ce mécanisme de fixation ne fonctionne pas toujours correctement avec des relations multiples à plusieurs. Une solution de contournement implique:
Désactivation du chargement paresseux: Empêcher le chargement paresseux pour garantir que toutes les données sont récupérées dans une seule requête:
<code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>
Projection avec filtrage: Utilisez une projection pour filtrer les entités liées pendant la requête:
<code class="language-csharp">var buses = Context.Busses .Where(b => b.IsDriving) .Select(x => new { b, Passengers = x.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();</code>
Fixup de relation automatique: EF remplira automatiquement la propriété Passengers
de chaque objet Bus
avec seulement les passagers éveillés.
objets de transfert de données (DTOS): Utilisez un outil de mappage comme Automapper pour convertir les données récupérées en DTO pour un transfert de données optimal.
Solution du noyau du cadre de l'entité (5.0 et ultérieure)
EF Core 5.0 et les versions ultérieures prennent directement en charge les imbriquées incluent les clauses, simplifiant le processus:
<code class="language-csharp">var buses = Context.Busses .Include(bus => bus.Passengers.Where(p => p.Awake)) .ToList();</code>
Approche alternative: bibliothèques tierces
Les bibliothèques comme EntityFramework.DynamicFilters
offrent une méthode plus rationalisée pour gérer les filtres globaux applicables aux collections incluses. Cela peut améliorer la lisibilité et la maintenabilité du code pour des scénarios complexes.
Résumé
La meilleure approche pour charger avec impatience des données connexes avec le filtrage dans l'entité chargée du cadre sur la version utilisée. EF Core 5.0 offre une solution simple. Pour EF6, une solution de contournement impliquant la désactivation du chargement paresseux et l'utilisation de projections est nécessaire. Les bibliothèques tierces fournissent une alternative pour l'amélioration de l'organisation et de la flexibilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!