Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF DataContext:代码执行时间太长_C#_Entity Framework Core_Ef Core 2.2 - Fatal编程技术网

C# EF DataContext:代码执行时间太长

C# EF DataContext:代码执行时间太长,c#,entity-framework-core,ef-core-2.2,C#,Entity Framework Core,Ef Core 2.2,我在dataContext中具有以下属性: public DbSet<CollectionSite> CollectionSites { get; set; } 所有这些变量如NIDACollections等都是bool?。 这段代码刚刚创建了IQueryable对象,没有执行对源代码的请求,但这段代码正在执行4-5秒(i7,16Gb的RAM)。为什么这么久?我的代码出了什么问题?运行SqlProfiler,如果您将sql server management studio与

我在dataContext中具有以下属性:

    public DbSet<CollectionSite> CollectionSites { get; set; }
所有这些变量如
NIDACollections
等都是
bool?

这段代码刚刚创建了
IQueryable
对象,没有执行对源代码的请求,但这段代码正在执行4-5秒(i7,16Gb的RAM)。为什么这么久?我的代码出了什么问题?

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


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

表中有多少行?这些列中有没有索引?选择最有选择性的一个,并在其上放置一个非聚集索引。但是,如果我只是组合查询,那么表中有多少行又有什么关系呢?在我看来,有两件事可能是错误的。正如@Milney所说,您有很多行要处理,或者您对
NIDACollections
SAPCollections
等使用延迟加载。尝试使用快速加载。只有通过添加
.ToList()对其进行迭代,查询才会执行
或在
foreach中使用它
将查询创建分解为对
Where()
的多个调用。这样,您将发现哪些行执行得很慢。在具有复杂getter的条件下,对象中可能存在属性。另一个选择是如果有Visual Studio Profiler,则使用它。SqlProfiler不显示任何内容,如果它显示任何内容,它会感到惊讶,因为我不调用DB,只需合并一个请求@OlegSh您使用的是数据库集,这表明您正在尝试访问数据库中的数据。当您迭代查询(-results)时,将发生数据库调用。@HansKesting,但我不调用ToList()或其他什么
        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))
            ;