Pergunta

Eu estou trabalhando com um grande conjunto de dados hierárquica no sql server - modeladas utilizando o padrão "EntityID, ParentID" tipo de abordagem. Existem cerca de 25.000 nós em toda a árvore.

Eu muitas vezes precisam de sub-árvores de acesso da árvore, e, em seguida, acessar dados relacionados que pendura fora os nós da subárvore. Eu construí uma camada de acesso a dados, há alguns anos com base em funções com valor de tabela, usando consultas recursivas para buscar uma sub-árvore arbitrária, dado o nó raiz da sub-árvore.

Eu estou pensando em usar o Entity Framework, mas eu não posso ver como consultar dados hierárquicos como isto. AFAIK não há nenhuma consulta recursiva em Linq, e eu não posso expor um TVF no meu modelo de dados entidade.

É a única solução para continuar usando procedimentos armazenados? Tem mais alguém resolveu isso?

Esclarecimento:. Por 25.000 nós na árvore Estou me referindo ao tamanho do conjunto de dados hierárquico, não nada a ver com objetos ou o Entity Framework

Foi útil?

Solução

Pode o melhor para usar um padrão chamado "Nested Set", que lhe permite obter uma sub arbitrária dentro de uma consulta. Isto é especialmente útil se os nós não são manipuladas com muita frequência: Como gerenciar dados hierárquicos em MySQL .

Em um mundo perfeito a estrutura de entidade iria fornecer possibilidades de economizar e dados de consulta que utilizam este padrão de dados.

Outras dicas

Tudo é possível com Entity Framework mas você tem que hack and slash seu caminho a ele. O banco de dados Eu estou trabalhando atualmente contra tem muitas "tabelas titular" desde Pontos por exemplo, é compartilhado com ambas as equipes e usuários. Ambos os usuários e as equipes também pode ter um blog.

Quando você diz 25 000 nós quer dizer propriedades de navegação? Se então eu acho que poderia ser complicado para obter o acesso de dados no lugar. Não é difícil de navegar, pesquisar etc com estrutura de entidade, mas tendem a modelo em papel, em seguida, criar o banco de dados com base em como eu quero navegar enquanto estiver usando estrutura de entidade. Parece que você não tem essa opção.

Obrigado por estas sugestões.

Eu estou começando a perceber que a resposta é para remodelar os dados no banco de dados -. Quer ao longo das linhas de conjuntos aninhados como Georg sugere, ou talvez uma mesa de fechamento transitivo, que eu acabei de vir através

Dessa forma, eu estou esperando para obter dois benefícios principais:

a) mais rápida consulta aginst arbitrária subtrees

b) um modelo de dados que já não requer a consulta recursiva - por isso, talvez trazendo-o a uma curta distância do Entity Framework

É sempre incrível como tantas vezes a resposta certa para um problema difícil é não responder a isso, mas para fazer outra coisa em vez!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top