Maison > développement back-end > C++ > Comment charger avec impatience des entités liées avec une clause WHERE dans le cadre d'entité?

Comment charger avec impatience des entités liées avec une clause WHERE dans le cadre d'entité?

Susan Sarandon
Libérer: 2025-02-01 13:46:08
original
967 Les gens l'ont consulté

How to Eagerly Load Related Entities with a Where Clause in Entity Framework?

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:

  1. 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:

    Context.Configuration.LazyLoadingEnabled = false;
    Copier après la connexion
  2. Projection avec filtrage: Utilisez une projection pour filtrer les entités liées pendant la requête:

    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();
    Copier après la connexion
  3. Fixup de relation automatique: EF remplira automatiquement la propriété Passengers de chaque objet Bus avec seulement les passagers éveillés.

  4. 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:

var buses = Context.Busses
                    .Include(bus => bus.Passengers.Where(p => p.Awake))
                    .ToList();
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal