c# – 实体框架核心计数没有最佳性能

前端之家收集整理的这篇文章主要介绍了c# – 实体框架核心计数没有最佳性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要获得一定的过滤器的记录数量.

理论上这个说明:

_dbContext.People.Count (w => w.Type == 1);

它应该生成sql,如:

Select count (*)
from People
Where Type = 1

但是,生成sql是:

Select Id,Name,Type,DateCreated,DateLastUpdate,Address
from People
Where Type = 1

正在生成查询需要更长的时间才能在具有多个记录的数据库中运行.

我需要生成第一个查询.

如果我只是这样做:

_dbContext.People.Count ();

实体框架生成以下查询

Select count (*)
from People

..运行非常快.

如何生成第二个查询传递搜索条件到计数?

解决方法

这里没有什么可以回答的.如果您的ORM工具不会从简单的LINQ查询中产生预期的SQL查询,则无法通过重写查询(而不是首先执行此操作)来实现.

EF Core在LINQ查询中有一个混合客户端/数据库评估的概念,允许他们发布具有不完整/非常低效的查询处理的EF Core版本,就像您的情况一样.

摘自Features not in EF Core(注意不要这个词)和Roadmap

Improved translation to enable more queries to successfully execute,with more logic being evaluated in the database (rather than in-memory).

很快,他们正在计划改进查询处理,但是我们不知道什么时候会发生什么程度和什么程度的程度(记住混合模式可以让他们考虑查询“工作”).

那么有什么选择?

>首先,远离EF核心,直到它变得非常有用.回到EF6,没有这样的问题.
>如果您不能使用EF6,请使用最新的EF Core版本进行更新.

例如,在v1.0.1和v1.1.0中,查询生成预期的sql(测试),因此您可以简单升级,具体问题将会消失.

但请注意,随着新版本的改进,引入了错误/回归(例如您可以在这里看到EFCore returning too many columns for a simple LEFT OUTER join),所以这样做是自己的风险(再次考虑第一个选项,即Which One Is Right for You

猜你在找的C#相关文章