9
votes

Charge impatiente une table auto-référençant

J'ai une table de référencement standard de catégories . Dans mon modèle d'entité, j'ai fait des associations enfants et parent . Est-il possible de charger l'ensemble de la catégorie sans chargement paresseux?

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

est-il possible de charger des références si j'ai tous les objets de catégorie déjà chargés? < / p>

une méthode à charger consiste à ajouter la propriété enfants plusieurs fois xxx

mais cela génère une très longue insane Code SQL et aussi ça ne fait pas ce que je veux.


0 commentaires

3 Réponses :


1
votes

OK, vous pouvez envisager d'utiliser la méthode de charge. XXX

Bien sûr, la catégorie Entité doit être suivie par ObjectContext.

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


2 commentaires

Je connais cette méthode (il générera des sucrets de requêtes T-SQL), mais aussi je le charge de muss sans suivi, car je le sauve dans le cache. Je cherche quelque chose d'autre. Si je charge une table entière de catégories, j'ai également chargé des catégories de parents et d'enfants, mais les propriétés de l'association ne sont pas chargées. Aussi, j'ai une table apparentée de catégorieType et je le charge de muss pour chaque catégorie quel que soit leur même rangée ...


Ok, je n'ai pas vu que vous devez le mettre en cache. Hmm, je vais essayer de penser comment cela pourrait être résolu.



1
votes

Non, ce n'est pas possible. Considérez: toutes les requêtes LINQ aux entités sont traduites en SQL. Quelle instruction SQL comprend une profondeur illimitée dans une hiérarchie auto-référençant? Dans SQL standard, il n'y en a pas. S'il y a une extension pour cela dans T-SQL, je ne sais pas ce que c'est, et je ne pense pas non plus les fournisseurs d'EF.


4 commentaires

Mais si j'exécute une requête "Select * à partir de catégories", j'ai chargé une table entière et j'ai également chargé toutes les catégories parent et d'enfants, car ils sont tous dans une seule table. Donc, dans ce cas, il n'est pas très compliqué d'attribuer ces enregistrements chargés aux propriétés référencées ou non?


Si vous avez réellement itérité la table entière, tous les objets serait en mémoire et [I> serait déjà fixé, avec ou sans inclus. Mais cela n'arrivera pas tant que vous n'aurez pas atteint le dernier enregistrement de la table. Inclure des garanties que les objets associés seront là sur le dossier premier vous iTERE.


"Quelle instruction SQL comprend une profondeur illimitée dans une hiérarchie auto-référenceuse?" -> Expressions de table communes dans T-SQL


Il ne l'a pas demandé dans une requête. Mais je suppose que c'est ce qu'il cherche en fonction d'un commentaire ci-dessous.



0
votes

Une manière dont j'ai l'habitude de mettre en œuvre que si j'ai plusieurs entités, je souhaite que tous les enfants de la table de référencement sont d'utiliser CTE récursive de CTE et Procédure stockée à Obtenez leurs identifiants en utilisant l'entité framework: Voici le code à l'aide de la Frame-entité et de la première approche de code


0 commentaires