Оптимизация запроса 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()

→ Ссылка