Затем включить для явной загрузки в ядре Entity Framework? - PullRequest
1 голос
/ 24 февраля 2020

Я знаю, что могу go сделать шаг вперед, чтобы загрузить связанные данные, используя ThenInclude в Eager Loading, как в примере ниже

//Eager Loading
var publisher = await _context.Publishers
                              .Include(pub => pub.Books)
                                  .ThenInclude(book => book.Sales)
                              .Include(pub => pub.Users)
                              .Where(pub => pub.PubId == id)
                              .FirstOrDefaultAsync();

Как мне написать тот же запрос в явной загрузке? Как загрузить данные для Sales, не просматривая книги в нижнем регистре?

//Explicit Loading
var publisher = await _context.Publishers
                              .SingleAsync(pub => pub.PubId == id);

_context.Entry(publisher)
        .Collection(pub => pub.Books)
        .Load();

_context.Entry(publisher)
        .Collection(pub => pub.Users)                
        .Load();

1 Ответ

4 голосов
/ 24 февраля 2020

Query () метод - ваш друг.

Это частично объяснено в Запросе связанных сущностей подраздел Явная загрузка документации:

Вы также можете получить запрос LINQ, представляющий содержимое свойства навигации.

Это позволяет выполнять такие операции, как запуск оператора агрегирования над связанными объектами, без загрузки их в память.

Пример ...

Вы также можете отфильтровать, какие связанные объекты загружены в память.

Пример ...

Что они забыли упомянуть, что вы можете использовать его также для Include / ThenInclude данных явно загружаемых данных.

например,

_context.Entry(publisher)
    .Collection(pub => pub.Books)
    .Query() // <--
    .Include(book => book.Sales) // <--
    .Load();
...