Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A contagem de núcleos do Entity Framework não tem desempenho ideal


Não há muito o que responder aqui. Se sua ferramenta ORM não produzir a consulta SQL esperada de uma consulta LINQ simples, não há como permitir isso reescrevendo a consulta (e você não deveria estar fazendo isso em primeiro lugar).

O EF Core tem um conceito de avaliação mista de cliente/banco de dados em consultas LINQ o que permite que eles liberem versões do EF Core com processamento de consulta incompleto/muito ineficiente, como no seu caso.

Trecho de Recursos que não estão no EF Core (observe a palavra não ) e Roteiro :

Em breve, eles estão planejando melhorar o processamento de consultas, mas não sabemos quando isso acontecerá e qual o nível de graduação (lembre-se que o modo misto permite que eles considerem a consulta "funcionando").

Então, quais são as opções?
  • Primeiro, fique longe do EF Core até que ele se torne realmente útil. Volte para o EF6, ele não apresenta esses problemas.
  • Se você não puder usar o EF6, mantenha-se atualizado com a versão mais recente do EF Core.

Por exemplo, tanto na v1.0.1 quanto na v1.1.0 sua consulta gera o SQL pretendido (testado), então você pode simplesmente atualizar e o problema concreto desaparecerá.

Mas observe que, juntamente com as melhorias, os novos lançamentos introduzem bugs/regressões (como você pode ver aqui EFCore retornando muitas colunas para uma junção LEFT OUTER simples por exemplo), faça isso por sua conta e risco (e considere a primeira opção novamente, ou seja, Qual ​​é a certa para você :)