Expliciet laden van gerelateerde gegevens

Expliciet laden

U kunt een navigatie-eigenschap expliciet laden via de DbContext.Entry(...) API.

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

U kunt ook expliciet een navigatie-eigenschap laden door een afzonderlijke query uit te voeren die de gerelateerde entiteiten retourneert. Als wijzigingsregistratie is ingeschakeld, zal EF Core, wanneer een query een entiteit materialiseert, automatisch de navigatie-eigenschappen van de nieuw geladen entiteit instellen om te verwijzen naar entiteiten die al zijn geladen, en de navigatie-eigenschappen van de al geladen entiteiten instellen om te verwijzen naar de nieuw geladen entiteit.

U kunt ook een LINQ-query ophalen die de inhoud van een navigatie-eigenschap vertegenwoordigt.

Hiermee kunt u andere operators toepassen op de query. U kunt bijvoorbeeld een statistische operator toepassen op de gerelateerde entiteiten zonder ze in het geheugen te laden.

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

U kunt ook filteren welke gerelateerde entiteiten in het geheugen worden geladen.

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