1. 程式人生 > >CodeFirst實體類中,為什麽都把ICollection<x>定義成virtual?

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

load 這就是 bsp 必須 nco 通過 codefirst dom ans

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

只有定義成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; }
}

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