Jawne ładowanie powiązanych danych

Jawne ładowanie

Możesz jawnie załadować właściwość nawigacji za pośrednictwem interfejsu DbContext.Entry(...) API.

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();
}

Możesz również jawnie załadować właściwość nawigacji, wykonując oddzielne zapytanie zwracające powiązane jednostki. Jeśli śledzenie zmian jest włączone, gdy zapytanie zmaterializuje jednostkę, program EF Core automatycznie ustawi właściwości nawigacji nowo załadowanej jednostki, aby odwoływać się do wszystkich załadowanych jednostek i ustawić właściwości nawigacji już załadowanych jednostek, aby odwoływać się do nowo załadowanej jednostki.

Możesz również uzyskać zapytanie LINQ reprezentujące zawartość właściwości nawigacji.

Dzięki temu można zastosować inne operatory w zapytaniu. Na przykład zastosowanie operatora agregacji w powiązanych jednostkach bez ładowania ich do pamięci.

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();
}

Możesz również filtrować, które powiązane jednostki są ładowane do pamięci.

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();
}