sql >> Base de Datos >  >> RDS >> Sqlserver

Escribir CTE recursivo usando la sintaxis fluida de Entity Framework o la sintaxis en línea

AFAIK no hay soporte para CTE recursivos en LINQ ni en EF. La solución es exponer el CTE como una vista. El artículo sobre consultas recursivas o jerárquicas usando EF Code First y Migraciones muestra cómo implementar una vista de este tipo usando EF Code First Migraciones.

Intentar emular CTE mediante iteraciones recursivas del lado del cliente no se escala a grandes conjuntos de datos y da como resultado un intercambio de conversaciones con el servidor. Observe cómo su código EF devuelve IEnumerable no IQueryable , significa que materializa cada nivel y luego concatena el siguiente nivel para cada entrada como una solicitud separada . La solución basada en LINQ funcionará razonablemente para jerarquías poco profundas con un número de entradas limitado (y tenga en cuenta que muchos proyectos pueden tienen ese diseño de datos, las publicaciones/respuestas de los usuarios son un ejemplo típico), pero se derrumbarán bajo jerarquías profundas con muchos elementos.