Kapcsolódó adatok explicit betöltése

Explicit betöltés

A navigációs tulajdonságot explicit módon betöltheti az DbContext.Entry(...) API-val.

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

A navigációs tulajdonságot külön lekérdezés végrehajtásával is betöltheti, amely a kapcsolódó entitásokat adja vissza. Ha a változáskövetés engedélyezve van, akkor amikor egy lekérdezés egy entitást hoz létre, az EF Core automatikusan beállítja az újonnan betöltött entitás navigációs tulajdonságait, hogy hivatkozzon a már betöltött entitásokra, és beállítja a már betöltött entitások navigációs tulajdonságait az újonnan betöltött entitásra való hivatkozáshoz.

Olyan LINQ-lekérdezést is lekérhet, amely egy navigációs tulajdonság tartalmát jelöli.

Így más operátorokat is alkalmazhat a lekérdezésre. Például aggregátum operátor alkalmazása a kapcsolódó entitásokra anélkül, hogy betölti őket a memóriába.

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

Azt is szűrheti, hogy mely kapcsolódó entitások töltődnek be a memóriába.

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