zoukankan      html  css  js  c++  java
  • EF4.1之贪婪加载和延迟加载

    默认情况下,EF4.1是只查询到涉及到的数据对象,但是EF4.1支持两种方法进行控制其加载:

     1、贪婪加载

     2、延迟加载

    使用的表还是上次使用的Order 和 OrderDetails两张表来举例说明

    1、贪婪加载

    看下面一段代码:

    1                 var orders = from o in db.Orders.Include("OrderDetails")
    2                              where o.CustormName == "xiaoxiao"
    3                              select o;

    我们可以 直接Tostring()输出:下面是输出结果:

    通过查询语句我们可以看出,我们只要是想要查询一次 Order表里面的数据就要对应的将OrderDetail 里面的数据也一起全都查询出来。这样做的效率是非常低的。其实我们也是可以通过自己写sql语句来完成,后面我会讲到关于 T-sql的内容,就是EF支持sql脚本执行的API。

    2、延迟加载

    EF4.1默认是支持延迟加载,如果我们要是想要禁用掉他可以在 模型构建器里面将其禁用掉:

    1         public DbEntities()
    2         {
    3             this.Configuration.LazyLoadingEnabled = false;//禁用掉 延迟加载
    4         } 

    如何实现延迟加载:

        public class Order
        {
            public int OrderId { set; get; }
            
            public string OrderCode { set; get; }
            
            public string CustormName { set; get; }
    
           
            public virtual ICollection<OrderDetail> OrderDetails { set; get; }
        }

    通过virtual关键字来实现延迟加载:那又是怎么实现的呢:当EF访问你的 子实体的时候,会动态生成一个子实体对象,进而覆盖掉子实体对应的属性,这就是为什么标记为 virtual虚拟的原因了。

    总结:

    贪婪加载:一次将数据全都查询出来,所以在使用的时候一定要注意效率的问题。

    延迟加载:非常宽容,当需要的时候才加载数据。

  • 相关阅读:
    CSS3笔记
    HTML5新标签
    前端工程师面试题JavaScript部分(第五季)
    前端工程师面试题JavaScript部分(第四季)
    前端工程师面试题JavaScript部分(第三季)
    前端组件开发方式(二)
    前端组件开发方式(一)
    面向对象的代码研究(一)
    ServiceDemo,ClientDemo Socket chat
    Socket(java基础)
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3422033.html
Copyright © 2011-2022 走看看