10

Estoy trabajando con un gran conjunto de datos jerárquicos en el servidor SQL - modelado utilizando el tipo de enfoque estándar "EntityID, ParentID". Hay alrededor de 25,000 nodos en todo el árbol.¿Cómo uso el marco de entidad con datos jerárquicos?

que a menudo necesitan acceder a la sub-estructuras de árbol, y luego los datos relacionados con el acceso que cuelga de los nodos del subárbol. Hace algunos años, construí una capa de acceso a datos basada en funciones con valores de tabla, usando consultas recursivas para buscar un subárbol arbitrario, dado el nodo raíz del subárbol.

Estoy pensando en utilizar Entity Framework, pero no puedo ver cómo consultar datos jerárquicos como esto. AFAIK no hay consultas recursivas en Linq, y no puedo exponer un TVF en mi modelo de datos de entidad.

¿Es la única solución para seguir utilizando procs almacenados? ¿Alguien más ha resuelto esto?

Aclaración: Por 25.000 nodos en el árbol me refiero al tamaño del conjunto de datos jerárquica, de no tener nada que ver con los objetos o el marco de la entidad.

Respuesta

6

fuere el mejor para usar un patrón llamado "conjuntos anidados", lo que le permite obtener un subárbol arbitraria dentro de una consulta. Esto es especialmente útil si los nodos no se manipulan muy a menudo: Managing hierarchical data in MySQL.

En un mundo perfecto el marco de la entidad proporcionaría posibilidades de ahorrar y datos de consulta que utilizan este patrón de datos.

+0

El enlace desafortunadamente está ahora muerto – Oskar

+0

@Oskar: La página ahora está disponible en el sitio de su autor, actualicé el enlace. –

0

todo es posible con Entity Framework, pero hay que cortar y tajar su camino a ella. La base de datos en la que estoy trabajando actualmente tiene demasiadas "tablas de portadores" ya que Points, por ejemplo, se comparte con equipos y usuarios. Tanto los usuarios como los equipos también pueden tener un blog.

Cuando dices 25 000 nodos, ¿te refieres a propiedades de navegación? Si es así, creo que podría ser complicado conseguir el acceso a los datos en su lugar. No es difícil navegar, buscar etc. con el marco de la entidad, pero tiendo a modelar en papel y luego crear la base de datos en función de cómo quiero navegar mientras uso el marco de la entidad. Parece que no tienes esa opción.

+0

Gracias. En mi caso, la jerarquía (árbol) se modela con una sola tabla, en la que cada fila contiene datos sobre el nodo y su ID de nodo padre. – jamesfm

0

Gracias por estas sugerencias.

Empiezo a darme cuenta de que la respuesta es remodelar los datos en la base de datos, ya sea a lo largo de las líneas de conjuntos anidados como sugiere Georg, o tal vez una tabla de cierre transitivo, que acabo de encontrar.

De esa manera, estoy esperando para obtener dos beneficios clave:

a) consulta más rápido Aginst subárboles arbitrarias

b) un modelo de datos que ya no requiere consulta recursiva - así que quizás llevándola a poca alcance del marco de la entidad

Siempre es increíble cómo tan a menudo la respuesta correcta a un problema difícil es no contestar, pero hay que hacer algo mejor!

Cuestiones relacionadas