主要是用于延迟加载,提高性能用的
只有定义成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; }
}
本文主要介绍了Entity Framework中延迟加载的功能及其实现原理。通过禁用默认的延迟加载,可以实现查询实体及其相关子实体时的一次性加载。此外,文章还解释了为何需要将子实体集合属性标记为virtual。
3604

被折叠的 条评论
为什么被折叠?



