首页 > 解决方案 > EF DataContext:代码执行时间过长

问题描述

我在 dataContext 中有以下属性:

    public DbSet<CollectionSite> CollectionSites { get; set; }

其中CollectionSite有大约 30-40 个属性。

我尝试以下代码:

        var query = _context.CollectionSites
            .Where(cs =>
            cs.IsActive &&
            cs.OpenToPublic &&
            (NIDACollections == null || cs.NIDACollections == NIDACollections.Value) &&
            (SAPCollections == null || cs.SAPCollections == SAPCollections.Value) &&
            (observedRequested == null || cs.ObservedCollection == observedRequested.Value) &&
            (electronicCC == null || cs.RegulatedElectronicCCF == electronicCC.Value) &&
            (alcoholTestType == null || cs.BreathAlcohol == alcoholTestType.Value))
            ;

所有这些变量(如NIDACollectionsetc)在哪里bool?。这段代码只是创建了IQueryable<CollectionSite>对象并且不执行对源的请求,但是这段代码正在执行 4-5 秒(i7,16Gb 的 RAM)。为什么这么长?我的代码有什么问题?

标签: c#entity-framework-coreef-core-2.2

解决方案


运行 SqlProfiler,如果您使用带有 Sql server 的 sql server management studio,它内置在工具下,如果您使用其他数据库,请尝试从 EF 上下文记录生成的查询。

获取从您的 Linq 语句生成的查询并直接在数据库上运行它并分析查询计划。查看是什么导致此查询变慢。我的猜测是(由于缺少索引而进行的表扫描)。


推荐阅读