Sdílet prostřednictvím


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

Explicitní načítání

Navigační vlastnost můžete explicitně načíst prostřednictvím DbContext.Entry(...) rozhraní 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();
}

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 povolené, pak když dotaz materializuje entitu, EF Core automaticky nastaví navigační vlastnosti nově načtené entity tak, aby odkazovat na všechny již načtené entity, a nastavil navigační vlastnosti již načtených entit odkazující 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 = context.Blogs
        .Single(b => b.BlogId == 1);

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

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

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