Share via


明確載入相關資料

明確式載入

您可以透過 DbContext.Entry(...) 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();
}

您也可以透過執行會傳回相關實體的個別查詢,來明確地載入導覽屬性。 如果啟用變更追蹤,則當查詢具體化實體時,EF Core 會自動設定新載入實體的導覽屬性,以參考任何已載入的實體,並設定已載入實體的導覽屬性,以參考新載入的實體。

您也可以取得表示導覽屬性內容的 LINQ 查詢。

這可讓您在查詢上套用其他運算子。 例如,在相關實體上套用匯總運算子,而不將它們載入記憶體中。

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

您也可以篩選要將哪些相關實體載入至記憶體。

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