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

Entity Framework Kerneantal har ikke optimal ydeevne

Der er ikke meget at svare på her. Hvis dit ORM-værktøj ikke producerer den forventede SQL-forespørgsel fra en simpel LINQ-forespørgsel, er der ingen måde, du kan lade det gøre ved at omskrive forespørgslen (og du burde ikke gøre det i første omgang).

EF Core har et koncept med blandet klient/database-evaluering i LINQ-forespørgsler hvilket giver dem mulighed for at frigive EF Core-versioner med ufuldstændig/meget ineffektiv forespørgselsbehandling som i dit tilfælde.

Uddrag fra Funktioner ikke i EF Core (bemærk ordet ikke ) og Roadmap :

Om kort tid planlægger de at forbedre forespørgselsbehandlingen, men vi ved ikke, hvornår det vil ske, og hvilket niveau (husk, at den blandede tilstand giver dem mulighed for at betragte forespørgslen som "fungerende").

Så hvad er mulighederne?

  • For det første skal du holde dig væk fra EF Core, indtil det bliver virkelig nyttigt. Gå tilbage til EF6, den har ingen sådanne problemer.
  • Hvis du ikke kan bruge EF6, så hold dig opdateret med den seneste EF Core-version.

For eksempel, i både v1.0.1 og v1.1.0 genererer du forespørgsel den tilsigtede SQL (testet), så du blot kan opgradere, og det konkrete problem vil være væk.

Men bemærk, at sammen med forbedringer introducerer de nye udgivelser fejl/regressioner (som du kan se her EFCore returnerer for mange kolonner til en simpel LEFT OUTER join for eksempel), så gør det på egen risiko (og overvej den første mulighed igen, dvs. Hvilken er den rigtige for dig :)



  1. Hvordan kalder jeg MySQL-lagrede procedurer fra Perl?

  2. Kan du definere bogstavelige tabeller i SQL?

  3. Bedste måde at gemme et mange-til-mange forhold i MySQL?

  4. Oprettelse af vedligeholdelsesplaner i SQL Server