Entity framework 选择EF核心中的性能问题
您好,我想知道如何更好地更改select查询 这段代码如下所示,看起来很凌乱。 首先执行任何一项,如果是真的,则执行最后一项。但是还有其他短代码吗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
合同=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;