Включить все связанные данные объекта - PullRequest
1 голос
/ 23 сентября 2019

В настоящее время я использую 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 для загрузки всех связанных данных только одним запросом?

...