延遲載入

** 預設情況下啟用延遲載入。通過建立派生代理類和覆蓋虛擬導航 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;
    }
}

注意: 如果你正在使用序列化,請記得關閉延遲載入。因為序列化程式訪問每個屬性,所以你將從資料庫載入所有屬性。此外,你可以在導航屬性之間進行迴圈。