Question

Je travaille avec un grand ensemble de données hiérarchiques dans un serveur SQL - modélisé à l'aide du standard "EntityID, ParentID". genre d'approche. Il y a environ 25 000 nœuds dans l’arbre entier.

J'ai souvent besoin d'accéder à des sous-arbres de l'arborescence, puis à des données connexes qui sont suspendues aux noeuds de la sous-arborescence. J'ai construit il y a quelques années une couche d'accès aux données basée sur des fonctions à valeur de table, utilisant des requêtes récursives pour récupérer un sous-arbre arbitraire, en fonction du nœud racine du sous-arbre.

Je pense utiliser Entity Framework, mais je ne vois pas comment interroger des données hiérarchiques telles que ce. Autant que je sache, il n’ya pas d’interrogation récursive dans Linq et je ne peux pas exposer de TVF dans mon modèle de données d’entité.

La seule solution est-elle de continuer à utiliser les processus stockés? Quelqu'un d'autre a-t-il résolu ce problème?

Clarification: par 25 000 nœuds dans l’arborescence, je fais référence à la taille du jeu de données hiérarchique, et non à tout ce qui a trait aux objets ou à Entity Framework.

Était-ce utile?

La solution

Il est préférable d’utiliser un modèle appelé "Ensemble imbriqué", qui vous permet d’obtenir un sous-arbre arbitraire au sein d’une même requête. Ceci est particulièrement utile si les nœuds ne sont pas manipulés très souvent: Gestion des données hiérarchiques dans MySQL .

Dans un monde parfait, le cadre des entités offrirait la possibilité de sauvegarder et d'interroger des données à l'aide de ce modèle de données.

Autres conseils

Tout est possible avec Entity Framework, mais vous devez vous y frayer un chemin. La base de données sur laquelle je travaille actuellement a trop de " tables de détenteurs " par exemple, Points est partagé avec les équipes et les utilisateurs. Les utilisateurs et les équipes peuvent également avoir un blog.

Quand vous dites 25 000 nœuds, voulez-vous dire des propriétés de navigation? Si tel est le cas, je pense qu'il pourrait être difficile de mettre en place l'accès aux données. Il n’est pas difficile de naviguer, chercher etc. avec un framework d’entité, mais j’ai tendance à modéliser sur papier puis à créer la base de données en fonction de la façon dont je veux naviguer tout en utilisant un framework d’entité. On dirait que vous n'avez pas cette option.

Merci pour ces suggestions.

Je commence à comprendre que la solution consiste à remodeler les données de la base de données, en suivant des ensembles imbriqués, comme le suggère Georg, ou peut-être une table de fermeture transitive, que je viens de rencontrer.

Ainsi, j'espère obtenir deux avantages clés:

a) interrogation plus rapide contre les sous-arbres arbitraires

b) un modèle de données qui n’exige plus d’interrogation récursive - mettez-le donc facilement à la portée d’Entity Framework!

Il est toujours étonnant de constater à quel point la bonne réponse à un problème difficile est souvent de ne pas y répondre, mais de faire autre chose!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top