明確載入相關資料
明確式載入
您可以透過 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();
}