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();
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!