Freigeben über


Explizites Laden verwandter Daten

Explizites Laden

Sie können eine Navigationseigenschaft explizit über die DbContext.Entry(...) API laden.

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

Sie können eine Navigationseigenschaft auch explizit laden, indem Sie eine separate Abfrage ausführen, die die zugehörigen Entitäten zurückgibt. Wenn die Änderungsnachverfolgung aktiviert ist, legt EF Core beim Materialisieren einer Entität automatisch die Navigationseigenschaften der neu geladenen Entität fest, um auf bereits geladene Entitäten zu verweisen und die Navigationseigenschaften der bereits geladenen Entitäten festzulegen, um auf die neu geladene Entität zu verweisen.

Sie können auch eine LINQ-Abfrage abrufen, die den Inhalt einer Navigationseigenschaft darstellt.

Auf diese Weise können Sie andere Operatoren auf die Abfrage anwenden. Beispiel: Anwenden eines Aggregatoperators auf die zugehörigen Entitäten, ohne sie in den Arbeitsspeicher zu 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();
}

Sie können auch filtern, welche zugehörigen Entitäten in den Arbeitsspeicher geladen werden.

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