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

Die Anzahl der Entity Framework-Kerne hat keine optimale Leistung

Hier gibt es nicht viel zu beantworten. Wenn Ihr ORM-Tool nicht die erwartete SQL-Abfrage aus einer einfachen LINQ-Abfrage erzeugt, können Sie dies auf keinen Fall tun lassen, indem Sie die Abfrage neu schreiben (und das sollten Sie von vornherein nicht tun).

EF Core hat ein Konzept der gemischten Client-/Datenbankauswertung in LINQ-Abfragen Dadurch können sie EF Core-Versionen mit unvollständiger/sehr ineffizienter Abfrageverarbeitung wie in Ihrem Fall veröffentlichen.

Auszug aus Features not in EF Core (beachten Sie das Wort nicht ) und Roadmap :

In Kürze planen sie, die Abfrageverarbeitung zu verbessern, aber wir wissen nicht, wann dies geschehen wird und in welchem ​​​​Grad (denken Sie daran, dass der gemischte Modus es ihnen ermöglicht, Abfragen als "funktionierend" zu betrachten).

Welche Optionen gibt es also?

  • Halten Sie sich zunächst von EF Core fern, bis es wirklich nützlich wird. Gehen Sie zurück zu EF6, es hat keine derartigen Probleme.
  • Wenn Sie EF6 nicht verwenden können, bleiben Sie mit der neuesten EF Core-Version auf dem Laufenden.

Beispielsweise generiert Ihre Abfrage sowohl in v1.0.1 als auch in v1.1.0 das beabsichtigte SQL (getestet), sodass Sie einfach ein Upgrade durchführen können und das konkrete Problem behoben ist.

Beachten Sie jedoch, dass die neuen Versionen zusammen mit Verbesserungen Fehler/Regressionen einführen (wie Sie hier sehen können EFCore gibt zu viele Spalten für einen einfachen LEFT OUTER Join zurück zum Beispiel), tun Sie dies also auf eigenes Risiko (und ziehen Sie die erste Option erneut in Betracht, d. h. Welches für Sie das Richtige ist :)