J'ai une table auto-référencée standard de Categories
. Dans mon modèle d'entité j'ai fait des associations Children
et Parent
. Est-il possible de charger l'objet entier Category
sans chargement paresseux?Envie de charger une table auto-référencée
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 catégorie sont déjà chargés?
Une méthode pour le charger est d'ajouter la propriété Children
plusieurs fois
db.Categories.Include("Children.Children.Children.Children.Children")
mais cela génère un code T-SQL très long fou et aussi il ne fait pas ce que je veux.
Mais si j'exécute la requête "SELECT * FROM Categories" j'ai chargé toute la table et aussi j'ai chargé toutes les catégories parent et enfants, parce qu'elles sont toutes dans une table. Donc, dans ce cas, il n'est pas très compliqué d'assigner ces enregistrements chargés aux propriétés référencées, ou pas? –
Si vous itérez réellement toute la table, alors tous les objets * seront * en mémoire et * seront * déjà fixés, avec ou sans Include. Mais cela n'arrivera pas tant que vous n'aurez pas atteint le dernier enregistrement du tableau. Inclure des garanties que les objets liés seront là sur le * premier * enregistrement que vous itérez. –
"Quelle instruction SQL inclut une profondeur illimitée dans une hiérarchie auto-référencée?" -> Expressions de table communes dans T-SQL –