Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pisanie rekurencyjnego CTE przy użyciu składni Entity Framework Fluent lub składni wbudowanej

AFAIK nie ma obsługi rekurencyjnych CTE w LINQ ani w EF. Rozwiązaniem jest wyeksponowanie CTE jako widoku. Artykuł na temat zapytań rekurencyjnych lub hierarchicznych przy użyciu EF Code First i migracji pokazuje, jak wdrożyć taki widok przy użyciu migracji kodu EF.

Próba emulacji CTE poprzez wykonywanie rekurencyjnych iteracji po stronie klienta nie jest skalowana do dużych zestawów danych i skutkuje gadatliwą wymianą z serwerem. Zwróć uwagę, jak Twój kod EF zwraca IEnumerable nie IQueryable , oznacza to, że materializuje każdy poziom, a następnie łączy następny poziom dla każdego wpisu jako oddzielne żądanie . Rozwiązanie oparte na LINQ będzie działać rozsądnie w przypadku płytkich hierarchii z ograniczoną liczbą wpisów (i zauważ, że wiele projektów może mają taki układ danych, posty/odpowiedzi użytkowników są typowym przykładem), ale rozpadną się pod głęboką hierarchią z wieloma elementami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć wyniki dwóch zapytań w jeden zbiór danych

  2. Wprowadzenie do SQL Server 2017

  3. Agregacja ciągów na przestrzeni lat w SQL Server

  4. Utwórz serwer połączony w programie SQL Server (przykład T-SQL)

  5. Używając GETDATE() w wielu miejscach, czy lepiej jest używać zmiennej?