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虚拟的原因了。

    总结:

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

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

  • 相关阅读:
    我觉得总结的不错的entityFramework
    vs2013引入com组件后,发布时如何提取出dll文件
    win10创建扩展分区
    web.config配置
    mysql时间增加一年
    json介绍
    phpcms列表分页ajax加载更多
    phpcms批量更新内容页只更新一点就返回问题
    phpcms不能批量更新栏目页和内容页
    iis设置默认文档,提示web.config配置xml格式不正确
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3422033.html
Copyright © 2011-2022 走看看