Eager charge une table d'auto-référencement

c# entity-framework hierarchical-data

Question

J'ai une table de référence automatique de Categories . Dans mon modèle d'entité, j'ai créé des associations Children et Parent . Est-il possible de charger tout l'objet Category sans chargement paresseux?

Si j'utilise le code ci-dessous, il se charge uniquement au deuxième niveau.

db.Categories.MergeOption = System.Data.Objects.MergeOption.NoTracking;

var query = from c in db.Categories.Include("Children")
            where c.IsVisible == true
            orderby c.SortOrder, c.Id
            select c;

Est-il possible de charger des références si tous les objets de la catégorie sont déjà chargés?

Une méthode pour le charger consiste à ajouter plusieurs fois la propriété Children

db.Categories.Include("Children.Children.Children.Children.Children")

mais cela génère un très long code insensé T-SQL et cela ne fait pas ce que je veux.

Réponse acceptée

Non, ce n'est pas possible. Considérez: toutes les requêtes LINQ to Entities sont traduites en SQL. Quelle instruction SQL inclut une profondeur illimitée dans une hiérarchie à auto-référencement? En SQL standard, il n'y en a pas. S'il existe une extension pour cela dans T-SQL, je ne sais pas ce que c'est et je ne pense pas non plus que les fournisseurs EF le sachent.


Réponse populaire

Ok, vous pourriez envisager d'utiliser la méthode Load.

 if (!category.Children.IsLoaded)
        category.Children.Load();

Bien entendu, l'entité de catégorie doit être suivie par ObjectContext.

Il y a une meilleure explication ici comment-fait-entité-cadre comprend-travail-avec-récursives-hiérarchies semble-pas à .



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow