Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Schreiben von rekursivem CTE mit Entity Framework Fluent-Syntax oder Inline-Syntax

AFAIK gibt es keine Unterstützung für rekursive CTEs in LINQ oder in EF. Die Lösung besteht darin, den CTE als Ansicht bereitzustellen. Der Artikel zu rekursiven oder hierarchischen Abfragen mit EF Code First und Migrationen zeigt, wie Sie eine solche Ansicht mit EF Code First-Migrationen bereitstellen.

Der Versuch, CTEs durch rekursive clientseitige Iterationen zu emulieren, lässt sich nicht auf große Datensätze skalieren und führt zu einem gesprächigen Austausch mit dem Server. Beachten Sie, wie Ihr EF-Code IEnumerable zurückgibt nicht IQueryable bedeutet, dass jede Ebene materialisiert und dann die nächste Ebene für jeden Eintrag als separate Anfrage verkettet wird . Die LINQ-basierte Lösung funktioniert angemessen für flache Hierarchien mit begrenzter Anzahl von Einträgen (und beachten Sie, dass viele Projekte können haben ein solches Datenlayout, Benutzerbeiträge/Antworten sind ein typisches Beispiel), zerfallen aber unter tiefen Hierarchien mit vielen Elementen.