Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Le nombre de cœurs d'Entity Framework n'a pas des performances optimales

Il n'y a pas grand-chose à répondre ici. Si votre outil ORM ne produit pas la requête SQL attendue à partir d'une simple requête LINQ, vous ne pouvez en aucun cas le laisser faire en réécrivant la requête (et vous ne devriez pas le faire en premier lieu).

EF Core a un concept d'évaluation mixte client/base de données dans les requêtes LINQ ce qui leur permet de publier des versions EF Core avec un traitement des requêtes incomplet/très inefficace comme dans votre cas.

Extrait de Fonctionnalités absentes d'EF Core (notez le mot pas ) et Feuille de route :

Sous peu, ils envisagent d'améliorer le traitement des requêtes, mais nous ne savons pas quand cela se produira et à quel niveau (rappelez-vous que le mode mixte leur permet de considérer que la requête "fonctionne").

Alors, quelles sont les options ?

  • Tout d'abord, éloignez-vous d'EF Core jusqu'à ce qu'il devienne vraiment utile. Revenez à EF6, il n'y a pas de tels problèmes.
  • Si vous ne pouvez pas utiliser EF6, restez à jour avec la dernière version d'EF Core.

Par exemple, dans les v1.0.1 et v1.1.0, votre requête génère le SQL prévu (testé), vous pouvez donc simplement mettre à niveau et le problème concret aura disparu.

Mais notez qu'avec les améliorations, les nouvelles versions introduisent des bugs/régressions (comme vous pouvez le voir ici EFCore renvoie trop de colonnes pour une simple jointure LEFT OUTER par exemple), alors faites-le à vos risques et périls (et considérez à nouveau la première option, c'est-à-dire Lequel vous convient le mieux :)