Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Escrevendo CTE recursivo usando a sintaxe Fluent do Entity Framework ou a sintaxe Inline


AFAIK não há suporte para CTEs recursivos no LINQ nem no EF. A solução é expor o CTE como view. O artigo sobre consultas recursivas ou hierárquicas usando EF Code First e Migrations mostra como implantar essa exibição usando EF code first migrations.

A tentativa de emular CTEs fazendo iterações recursivas do lado do cliente não é dimensionada para grandes conjuntos de dados e resulta em uma troca de conversa com o servidor. Observe como seu código EF retorna IEnumerable não IQueryable , significa que ele materializa cada nível e então concatena o próximo nível para cada entrada como uma solicitação separada . A solução baseada em LINQ funcionará razoavelmente para hierarquias superficiais com contagem de entrada limitada (e observe que muitos projetos podem tem esse layout de dados, postagens/respostas de usuários sendo um exemplo típico), mas desmoronará sob hierarquias profundas com muitos elementos.