Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 选择EF核心中的性能问题_Entity Framework_Entity Framework Core - Fatal编程技术网

Entity framework 选择EF核心中的性能问题

Entity framework 选择EF核心中的性能问题,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,您好,我想知道如何更好地更改select查询 这段代码如下所示,看起来很凌乱。 首先执行任何一项,如果是真的,则执行最后一项。但是还有其他短代码吗 合同=x.家庭寄宿合同.Anyx1=>x1.合同是否有效?x、 HomestayContracts.LastOrDefaultx1=>x1.IsContractActive.ContractDate:null 我在没有任何数据的情况下尝试过,如果没有数据,它会将错误作为null对象 请帮帮我 谢谢:用这个 _context.Homes

您好,我想知道如何更好地更改select查询

这段代码如下所示,看起来很凌乱。 首先执行任何一项,如果是真的,则执行最后一项。但是还有其他短代码吗


合同=x.家庭寄宿合同.Anyx1=>x1.合同是否有效?x、 HomestayContracts.LastOrDefaultx1=>x1.IsContractActive.ContractDate:null

我在没有任何数据的情况下尝试过,如果没有数据,它会将错误作为null对象

请帮帮我

谢谢:

用这个

        _context.Homestays   
                .Include(x => x.CreatedUser)
                .Include(x => x.UpdatedUser)
                .Include(x => x.HomestayEvaluations)
                .Include(x => x.HomestayContracts)
                .Include(x => x.HomestayPoliceChecks)
                .Include(x => x.HomestayHouseHolds)
                .AsNoTracking()
                .Select(x => new Homestay()
                {
                    HomestayId = x.HomestayId,
                    HomestayFamily = ConstValue.GetHomestayFamilyName(x),
                    Address = x.Address,
                    Score = x.HomestayEvaluations.Any(x1 => x1.IsEvaluationActive) ? x.HomestayEvaluations.LastOrDefault(x1 => x1.IsEvaluationActive).GetScore() : 0,
                    Contract = x.HomestayContracts.Any(x1 => x1.IsContractActive) ? x.HomestayContracts.LastOrDefault(x1 => x1.IsContractActive).ContractDate : null,
                    Students = x.Students,
                    HouseHolders = x.HomestayHouseHolds.Count(x1 => x1.IsHouseHoldActive),
                    PoliceCheck = x.HomestayPoliceChecks.Any(x1 => x1.IsPoliceCheckActive) ? x.HomestayPoliceChecks.LastOrDefault(x1 => x1.IsPoliceCheckActive).PoliceCheckDate : null,
                    Language = x.Language,
                    Room = x.Room,
                    IsActive = x.IsActive,
                    CreatedDate = x.CreatedDate,
                    CreatedUserName = ConstValue.GetUserName(x.CreatedUser),
                    UpdatedDate = x.UpdatedDate,
                    UpdatedUserName = ConstValue.GetUserName(x.UpdatedUser)
                })
                .OrderByDescending(x => x.HomestayId);
您还可以在上下文的配置中禁用此查询的延迟加载

Contract = x.HomestayContracts.LastOrDefault(x1 => x1.IsContractActive)?.ContractDate ?? null

通过这种方式,您可以消除Include方法,从而缩短语句,但不会提高性能。使用存储过程提高性能

创建存储过程并执行存储过程查看Contract=x.HomestayContracts.Wherex1=>x1.IsContractActive.DefaultIfEmpty.LastOrDefault;您还可以转储所有.Include,因为您在查询中引用了它们。启用调试日志记录,将SQL从控制台复制到SQL Management Studio或您选择的其他工具,并检查此SQL及其查询计划。Contract=x.HomestayContracts.LastOrDefaultx1=>x1.IsContractActive?.ContractDate??null不工作。。。。。。。这是EF core的吗?不,是它的C6新功能。它与您的代码没有区别。两者的作用相同。我的略短。VS2013不支持C 6
context.Configuration.LazyLoadingEnabled = false;