Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Scrittura di CTE ricorsive utilizzando la sintassi di Entity Framework Fluent o la sintassi Inline

AFAIK non esiste supporto per CTE ricorsivi in ​​LINQ né in EF. La soluzione è esporre il CTE come vista. L'articolo sulle query ricorsive o gerarchiche utilizzando EF Code First e le migrazioni mostra come distribuire tale visualizzazione utilizzando EF code first migrations.

Il tentativo di emulare CTE eseguendo iterazioni lato client ricorsive non si adatta a set di dati di grandi dimensioni e si traduce in uno scambio loquace con il server. Nota come il tuo codice EF restituisce IEnumerable non IQueryable , significa che materializza ogni livello e quindi concatena il livello successivo per ogni voce come richiesta separata . La soluzione basata su LINQ funzionerà ragionevolmente per gerarchie poco profonde con un numero di voci limitato (e si noti che molti progetti possono hanno un tale layout dei dati, i post/le risposte degli utenti sono un tipico esempio), ma si sgretoleranno sotto gerarchie profonde con molti elementi.