EF4.1之贪婪加载和延迟加载_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > EF4.1之贪婪加载和延迟加载

EF4.1之贪婪加载和延迟加载

 2013/11/13 20:50:10  小小gogo  博客园  我要评论(0)
  • 摘要:默认情况下,EF4.1是只查询到涉及到的数据对象,但是EF4.1支持两种方法进行控制其加载:1、贪婪加载2、延迟加载使用的表还是上次使用的Order和OrderDetails两张表来举例说明1、贪婪加载看下面一段代码:1varorders=fromoindb.Orders.Include("OrderDetails")2whereo.CustormName=="xiaoxiao"3selecto;我们可以直接Tostring()输出:下面是输出结果:通过查询语句我们可以看出
  • 标签:

默认情况下,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虚拟的原因了。

总结:

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

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

  • 相关文章
发表评论
用户名: 匿名