Explicitní načtení souvisejících dat

Explicitní načítání

Navigační vlastnost můžete načíst přímo prostřednictvím rozhraní API DbContext.Entry(...).

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

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

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

Navigační vlastnost můžete také explicitně načíst spuštěním samostatného dotazu, který vrátí související entity. Pokud je sledování změn povoleno, pak když dotaz zhmotní entitu, EF Core automaticky nastaví navigační vlastnosti nově načtené entity tak, aby odkazovaly na všechny již načtené entity, a nastaví navigační vlastnosti již načtených entit tak, aby odkazovaly na nově načtenou entitu.

Můžete také získat dotaz LINQ, který představuje obsah navigační vlastnosti.

To vám umožní použít u dotazu další operátory. Například použití agregačního operátoru u souvisejících entit bez jejich načtení do paměti.

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

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

Můžete také filtrovat, které související entity se načtou do paměti.

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

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