В настоящее время я использую Lazy Proxies с ef-Core.Для большинства моих запросов мне действительно нравится ленивая загрузка, но у меня есть один конкретный запрос, который имеет много зависимостей от других объектов.
Что выглядит примерно так:
- Model
- ICollection<Model2>
- ICollection<Model3>
- Model4
- Model5
- Model6
Для этого запроса было бы лучше просто загрузить все сразу, это повышение производительности примерно на 200%.
Мой вопрос сейчас, есть ли способ просто загрузить все связанные данные?
То, что я сейчас делаю, выглядит примерно так:
var entity1 = await DbContext.Entites1.FirstOrDefaultAsync(x => x.Id == 1);
var entities2 = await DbContext.Entry(entity1).Collection(x => x.Entites2).Query().ToListAsync();
foreach (var entity2 in entities2)
{
var entities3 = await DbContext.Entry(entity2).Collection(x => x.Entites3).Query().Include(x => x.Entity4).ThenInclude(x => x.Entity5).Include(x => x.Entity4).ThenInclude(x => x.Entity6).ToListAsync();
item.LessonEntries = entities3;
}
Этоуже намного лучше, но все равно выполняет несколько запросов.
Если это невозможно, можно ли это сделать с помощью методов Include
и ThenInclude
для загрузки всех связанных данных только одним запросом?