Оптимизация запроса entity framework
Имеется неприятная проблема с большим кол-вом .Include(), формируется запрос с большим кол-вом join-в откуда вытекает огромная нагрузка на БД. Как это можно оптимизировать?
ProgramSlots = context.ProgramSlots.Where(ps => ps.IsActive || loadAll)
.Include(p => p.AllProgramSlotCandidates)
.Include("AllProgramSlotCandidates.AllConditions")
.Include("AllProgramSlotCandidates.Program")
.Include("AllProgramSlotCandidates.Program.ProgramTerritories")
.Include("AllProgramSlotCandidates.Program.Extentions")
.Include("AllProgramSlotCandidates.Program.PriceFactors")
.Include("AllProgramSlotCandidates.Program.Product")
.Include("AllProgramSlotCandidates.Program.ProgramAllowances")
.Include("AllProgramSlotCandidates.Program.ProgramPremiums")
.Include("AllProgramSlotCandidates.Program.RiskConfigurations")
.Include("AllProgramSlotCandidates.Program.RiskConfigurations.Risk")
.Include("AllProgramSlotCandidates.Program.RiskConfigurations.Risk.Subrisks")
.Include("AllProgramSlotCandidates.Program.InsuranceProvider")
.Include("AllProgramSlotCandidates.Program.InsuranceProvider.FactorConfigurations")
.Include("AllProgramSlotCandidates.Program.InsuranceProvider.InsuranceProviderRisks")
.Include("AllProgramSlotCandidates.Program.InsuranceProvider.InsuranceProviderRisks.Risk")
.Include("AllProgramSlotCandidates.Program.InsuranceProvider.PriceVariations")
.Include("AllProgramSlotCandidates.Program.Product.Configuration")
.Include("AllProgramSlotCandidates.Program.Product.FactorConfigurations")
.ToList();
Ответы (1 шт):
Автор решения: RusArt
→ Ссылка
Если вы используете EF Core 5 и выше, воспользуйтесь функционалом Split Query
Документацию можно найти тут. Один из способов использования - применить .AsSplitQuery() к запросу.
Если версия EF Core ниже 5 - вам придется подгружать навигационные свойства другими способами, не через Include. Например, через entry.Collection(...).LoadAsync()