主要是用於延遲加載,提高性能用的
只有定義成virtual後纔可以延遲加載。
延遲加載,默認情況下,延遲加載被支持,如果你希望禁用它,必須顯式聲明,最好的位置是在 DbContext 的構造器中。
public MyDomainContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
這樣延遲加載就如你所願了。當查詢一個實體集的時候,相關的子實體也一併加載。當 EF 訪問實體的子實體的時候是如何工作的呢?你的集合是 POCO 的集合,所以,在訪問的時候沒有事件發生,EF 通過從你定義的實體派生一個動態的對象,然後覆蓋你的子實體集合訪問屬性來實現。這就是爲什麼需要標記你的子實體集合屬性爲 virtual 的原因。
public class Order
{
public int OrderID { get; set; }
public string OrderTitle { get; set; }
public string CustomerName { get; set; }
public DateTime TransactionDate { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
public virtual List<Business> Businesses { get; set; }
}