Maison > base de données > tutoriel mysql > Comment EF Core peut-il mapper efficacement une table de catégories auto-référencée pour la récupération de données hiérarchiques ?

Comment EF Core peut-il mapper efficacement une table de catégories auto-référencée pour la récupération de données hiérarchiques ?

Linda Hamilton
Libérer: 2025-01-03 01:32:39
original
634 Les gens l'ont consulté

How Can EF Core Efficiently Map a Self-Referencing Category Table for Hierarchical Data Retrieval?

Mappage de la structure de la table de catégories auto-référencée au noyau EF

Le problème découle de la complexité de la récupération d'une structure hiérarchique, telle que la catégorie table avec sa colonne ParentId, dans les limites d'EF Core et de LINQ. Pour résoudre ce problème, une fonction récursive a été utilisée pour parcourir manuellement les catégories et remplir la propriété ChildCategories.

Cependant, une solution plus efficace exploitant toutes les capacités d'EF Core a émergé :

Utilisation un seul Include

Contrairement aux tentatives précédentes de charger une partie de l'arborescence avec Include(), cette approche implique un seul Include() sur la propriété ChildCategories. Ceci, combiné à la matérialisation de la requête dans un contexte LINQ to Objects, permet à la correction des propriétés de navigation d'EF Core de gérer le mappage.

Récupération optimisée avec filtrage

Pour récupère uniquement les nœuds racines de l'arborescence des catégories, comme l'exige la méthode GetAll() du référentiel, un filtre est appliqué après que la requête a été matérialisé :

return Table
       .AsEnumerable()
       .Where(x => x.ParentId == null)
       .ToList();
Copier après la connexion

En matérialisant la requête dans un contexte LINQ to Objects à l'aide de AsEnumerable(), les propriétés de navigation sont corrigées avant l'application du filtrage. Il en résulte une seule requête SQL qui récupère efficacement la structure hiérarchique souhaitée sans avoir besoin de fonctions récursives.

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!

source:php.cn
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