延遲載入
** 預設情況下啟用延遲載入。通過建立派生代理類和覆蓋虛擬導航 proeprties 來實現延遲載入。第一次訪問屬性時會發生延遲載入。
int companyId = ...;
Company company = context.Companies
.First(m => m.Id == companyId);
Person founder = company.Founder; // Founder is loaded
foreach (Address address in company.Addresses)
{
// Address details are loaded one by one.
}
要關閉特定導航屬性的 Lazy 載入,只需從屬性宣告中刪除 virtual 關鍵字:
public Person Founder { get; set; } // "virtual" keyword has been removed
如果要完全關閉延遲載入,則必須更改配置,例如,在 Context 建構函式中 :
public class MyContext : DbContext
{
public MyContext(): base("Name=ConnectionString")
{
this.Configuration.LazyLoadingEnabled = false;
}
}
注意: 如果你正在使用序列化,請記得關閉延遲載入。因為序列化程式訪問每個屬性,所以你將從資料庫載入所有屬性。此外,你可以在導航屬性之間進行迴圈。