Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Писане на рекурсивна CTE с помощта на Entity Framework Fluent синтаксис или Inline синтаксис

AFAIK няма поддръжка за рекурсивни CTE в LINQ, нито в EF. Решението е да се изложи CTE като изглед. Статията за рекурсивни или йерархични заявки, използващи първо код EF и миграции, показва как да разгърнете такъв изглед с помощта на първо мигриране на EF код.

Опитът за емулиране на CTE чрез извършване на рекурсивни итерации от страна на клиента не се мащабира до големи набори от данни и води до бъбрив обмен със сървъра. Обърнете внимание как вашият EF код връща IEnumerable не IQueryable , това означава, че материализира всяко ниво и след това конкатенира следващото ниво за всеки запис като отделна заявка . Решението, базирано на LINQ, ще работи разумно за плитки йерархии с ограничен брой влизания (и имайте предвид, че много проекти могат имат такова оформление на данните, като типичен пример са потребителските публикации/отговори), но ще се разпаднат под дълбоки йерархии с много елементи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извършете анализ на продукта с помощта на пълнотекстово търсене на SQL Server. Част 1

  2. Нулиране на началната стойност на самоличността след изтриване на записи в SQL Server

  3. SQL сървърът избира отделни редове, използвайки само най-новата стойност

  4. Използвайте OBJECTPROPERTY(), за да определите дали даден обект е изглед в SQL Server

  5. SQL Server преобразува низ в дата и час