sql >> Database >  >> RDS >> Sqlserver

Entity Framework Core-telling heeft geen optimale prestaties

Hier valt niet veel op te antwoorden. Als uw ORM-tool niet de verwachte SQL-query produceert op basis van een eenvoudige LINQ-query, kunt u dit op geen enkele manier laten doen door de query te herschrijven (en dat zou u in de eerste plaats niet moeten doen).

EF Core heeft een concept van gemengde client/database-evaluatie in LINQ-query's waardoor ze EF Core-versies kunnen uitbrengen met onvolledige/zeer inefficiënte queryverwerking zoals in jouw geval.

Uittreksel uit Functies niet in EF Core (let op het woord niet ) en Roadmap :

Binnenkort zijn ze van plan om de verwerking van zoekopdrachten te verbeteren, maar we weten niet wanneer dat zal gebeuren en op welk niveau (onthoud dat de gemengde modus hen in staat stelt om de zoekopdracht als "werkend" te beschouwen).

Dus wat zijn de opties?

  • Blijf eerst uit de buurt van EF Core totdat het echt nuttig wordt. Ga terug naar EF6, het heeft dergelijke problemen niet.
  • Als je EF6 niet kunt gebruiken, blijf dan op de hoogte met de nieuwste EF Core-versie.

In zowel v1.0.1 als v1.1.0 genereert je query bijvoorbeeld de beoogde SQL (getest), zodat je eenvoudig kunt upgraden en het concrete probleem is opgelost.

Maar merk op dat de nieuwe releases naast verbeteringen ook bugs/regressies introduceren (zoals je hier kunt zien EFCore retourneert te veel kolommen voor een eenvoudige LEFT OUTER join bijvoorbeeld), dus doe dat op eigen risico (en overweeg de eerste optie opnieuw, d.w.z. Welke is geschikt voor u :)



  1. Hoe een eenvoudig beoordelings- en 5-sterrenbeoordelingssysteem te bouwen?

  2. Hoe van database wisselen in Postgres?

  3. Hoe kan ik nul/0 resultaten opnemen in het COUNT-aggregaat?

  4. MySQL - Selecteer de meest recente datum uit een reeks van verschillende mogelijke tijdstempels?