zoukankan      html  css  js  c++  java
  • 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; }
    }

  • 相关阅读:
    2018.5.5-6 GDCPC2018广东省赛 6/10 Rank12 Au
    网络流24题总结
    BZOJ4259 残缺的字符串 FFT
    [转]CodePlus 2018 3月赛 博弈论与概率统计
    Aiiage Camp Day6 J Sort
    Daily Scrum7
    Daily Scrum6
    Daily Scrum5
    Daily Scrum4
    Daily Scrum3
  • 原文地址:https://www.cnblogs.com/sylone/p/9456671.html
Copyright © 2011-2022 走看看