CodeFirst實體類中,爲什麼都把ICollection<x>定義成virtual?

主要是用於延遲加載,提高性能用的

只有定義成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; } 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章