我在我的项目中使用 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/