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

Il conteggio di Entity Framework Core non ha prestazioni ottimali

Non c'è molto da rispondere qui. Se il tuo strumento ORM non produce la query SQL prevista da una semplice query LINQ, non è possibile che lo faccia riscrivendo la query (e non dovresti farlo in primo luogo).

EF Core ha un concetto di valutazione mista client/database nelle query LINQ che consente loro di rilasciare versioni di EF Core con elaborazione delle query incompleta/molto inefficiente come nel tuo caso.

Estratto da Funzioni non in EF Core (nota la parola non ) e Roadmap :

A breve, stanno pianificando di migliorare l'elaborazione delle query, ma non sappiamo quando accadrà e quale livello di laurea (ricorda che la modalità mista consente loro di considerare le query "funzionanti").

Allora quali sono le opzioni?

  • In primo luogo, stai lontano da EF Core finché non diventa davvero utile. Torna a EF6, non ha problemi di questo tipo.
  • Se non riesci a utilizzare EF6, tieniti aggiornato con l'ultima versione di EF Core.

Ad esempio, sia nella v1.0.1 che nella v1.1.0 la query genera l'SQL previsto (testato), quindi puoi semplicemente eseguire l'aggiornamento e il problema concreto sarà risolto.

Ma tieni presente che, insieme ai miglioramenti, le nuove versioni introducono bug/regressioni (come puoi vedere qui EFCore restituisce troppe colonne per un semplice join LEFT OUTER per esempio), quindi fallo a tuo rischio (e considera di nuovo la prima opzione, ovvero Quello che fa per te :)