Явная загрузка связанных данных

Явная загрузка

Вы можете явно загрузить свойство навигации с помощью API DbContext.Entry(...).

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    context.Entry(blog)
        .Collection(b => b.Posts)
        .Load();

    context.Entry(blog)
        .Reference(b => b.Owner)
        .Load();
}

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

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

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

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    var postCount = context.Entry(blog)
        .Collection(b => b.Posts)
        .Query()
        .Count();
}

Можно также фильтровать связанные сущности, которые загружаются в память.

using (var context = new BloggingContext())
{
    var blog = context.Blogs
        .Single(b => b.BlogId == 1);

    var goodPosts = context.Entry(blog)
        .Collection(b => b.Posts)
        .Query()
        .Where(p => p.Rating > 3)
        .ToList();
}