linq - EF core 2第一次查询慢

标签 linq c#-6.0 ef-core-2.0

我在我的项目中使用 EF core 2 作为 ORM。 我在执行此查询时遇到了这个问题:

 var query = (from droitsGeo in _entities.DroitsGeos
              join building in  _entities.Batiments
              on droitsGeo.IdPerimetre equals building.IdBatiment
              where droitsGeo.IdUtilisateur == idUser &&
              droitsGeo.IdClient == idClient &&
              building.Valide == true &&
              droitsGeo.IdNiveauPerimetre == geographicalLevel
              orderby sort ascending
              select new GeographicalModel
              {
                 Id = building.IdBatiment,
                 IdParent = building.IdEtablissement,
                 Label = building.LibBatiment,
              });

第一次执行大约需要 5 秒,第二次执行不到 1 秒,如下所示:

首次执行查询:

已用时间 EF:00:00:04.8562419

首次执行查询后:

已用时间 EF:00:00:00.5496862

已用时间 EF:00:00:00.6658079

已用时间 EF:00:00:00.6176030

我使用存储过程得到了相同的结果。

当我在 SQL Server 中执行 EF 生成的 SQL 查询时,不到一秒就返回结果。

EF Core 2 有什么问题或者我错过了配置中的某些内容吗?

最佳答案

默认情况下,EF 会跟踪您运行查询的所有实体。

当您第一次运行它时,轨道更改机制就会启动......这就是为什么它需要更长的时间。

您可以避免这种情况,尤其是在编写查询时使用 .AsNoTracking() 检索集合时。

看一下:

var items = DbContext.MyDbSet
    .Include(SecondObject)
    .AsNoTracking()
    .ToList();

关于linq - EF core 2第一次查询慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913897/

相关文章:

c# - 二元运算符 Multiply 没有为类型 'System.Int32' 和 'System.Double' 定义。

entity-framework - EF Core 2.0 scaffold-dbcontext 在另一个项目中查找 ConnectionString

entity-framework-core - 在 EF Core 中如何选择特定列并保存

c# - "=>"运算符在 C# 的属性中意味着什么?

c# - 使用 async 和 await 回调

c# - EF Core 2.0 TransactionScope 错误

c# - LINQ 中的查询比 SQL 更复杂

c# - 使用 LINQ 联合两个嵌套 List<object>

c# - 有没有更好的方法来组合这两个 Linq 表达式?

c# - 在 Razor View 中使用 "nameof"运算符