EF中的延迟加载和贪婪加载

延迟加载:

优点:

仅在需要的时候加载数据,不需要预先计划,从而避免了各种复杂的外连接、索引、视图操作带来的低效率问题

使用方式:

第一:

在需要的延迟加载的属性前加上virtual,该属性的类型可以是任务的集合类型 ICOLOOCT<T>或者是0、1..1关联属性

如: public virtual List<Product> Products {get;set;}

第二:

在context构造器中开启延迟加载功能

ContextOptions.LazyLodingEnabled = true;

缺点:

       多次与数据库交互,性能降低

阻止延迟加载解决方案:

       Tolist(),返回的东西是个内存级的对象,就是说强迫它在这里执行一次SQL语句,查询到的东西放在Web服务器内存里,这里达到了缓存的效果,从而阻止了延迟加载

时间: 2024-10-27 07:34:32

EF中的延迟加载和贪婪加载的相关文章

学习EF之贪婪加载和延迟加载

从暑假开始接触code first以来,一直感觉很好用,主要在于开发过程中以业务为中心可以随时修改数据模型生成数据库,还有一个原因就是查询起来很方便 这里找了一个以前database first的一段代码 public IEnumerable<Category> GetParAndGrand(int id) { var par = db.Category.Find(db.Category.Find(id).ParentId); if(par.Id == id) { par = null; }

EF中的贪婪加载和延迟加载(懒加载)

在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的开销是很到的,尤其是在循环中,如果数据量不是很多的情况下还可以接受,如果数据量一旦大气来,那么这个效率则是影响非常大的.那该怎么办呢?其实在Entity Framwork中,除了提供了懒加载技术还提供了一个“贪婪加载”.那么什么是贪婪加载呢?从名字上看,就是非常的粗鲁的,一次性的吧相关的数据全部查询出来,虽然在性能上说还是有点影响的,但是比起在循环中使用懒加载要强了不少了

EntityFramework(EF)贪婪加载和延迟加载的选择和使用

贪婪加载:顾名思议就是把所有要加载的东西一 次性读取 1 using (var context = new MyDbContext()) 2 { 3 var orders = from o in context.Orders.Include("OrderDetails") select o; 4 } 当读取订单信息orders的时候,我们希望把订单的详细信息也读取出来,那么这里我们使用Include关键字将关联表也加载进 来. 延迟加载:即当我们需要用到的时候才进行加载(读取) 当我们

【EF学习笔记07】----------加载关联表的数据 贪婪加载

讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entities()) { var classes = db.Classes.Where(v => v.ClassName == "机电10502").Include(v => v.Student); foreach (var cls in classes) { Console.WriteLine("============"+cls.C

分享:“延迟加载与预加载”使用体会

注:文章以Linq to Entities 讲解 接触mvc+ef开发一年时间左右了,之前一直处于使用状态,对ef里面的一些概念并没有太多的研究,在解决问题的过程中有些疑问一直逗留在脑海中,现在稍微可以空下来查查资料并整理下了. 什么是"延迟加载"和"预加载"?听上去好像很拽的样子. 延迟加载: 老大最初给我的解释--"当使用到的时候才去加载,比如:ToList().ToDictionary()的时候",自己也简单的百度过一下,做过一些简单的测试

include延时加载和贪婪加载

贪婪加载:顾名思议就是把所有要加载的东西一 次性读取 using (var  context = new MyDbContext()) {     var orders {     var orders = from o in context.Orders.Include("OrderDetails") select o; } 当读取订单信息orders的时候,我们希望把订单的详细信息也读取出来,那么这里我们使用Include关键字将关联表也加载进 来. 延迟加载:即当我们需要用到的时

Hibernate检索策略之延迟加载和立即加载

延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类:  1.类级别的查询策略 2.一对多和多对多关联的查询策略 3.多对一关联的查询策略 什么情况下使用延迟加载? 如果程序加载一个对象的目的是为了访问它的属性,可以采用立即加载.如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采用延迟加载. 如何配置延时加载? 在Hibernate中通过对.hbm的lazy属性来赋值,不同位置出现lazy的作用和取值也是不

NHibernate 延迟加载与立即加载 (第七篇)

NHibernate 延迟加载与立即加载 (第七篇) 一.延迟加载 延迟加载可以理解为:当需要用的时候才加载. 假设我们数据库有一个Person对象,一个Country对象,其中Person属于Country,一对多关系.当我们Get()一个 Person对象的时候.并不立即把Country对象也加入来,而是当我们的代码执行到要通过Person调用Country对象的时 候,NHibernate才到数据库去查询对应的Country对象,这就叫延迟加载.相反,如果我们Get()一个Person对象

FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList

贪婪加载顾名思议就是把所有要加载的东西一次性读取. 本节内容为了配合[延时加载]而诞生,贪婪加载和他本该在一起介绍,开发项目的过程中应该双管齐下,才能写出高质量的程序. Dto 映射查询 Select<Tag>().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title }); Select<Tag>().Limit(10).ToList(a => new TestDto()); Select<T