EntityFramework 延迟加载

延迟加载:即当我们需要用到的时候才进行加载(读取)

当我们希望浏览某条订单信息的时候,才显示其对应的订单详细记录时,我们希望使用延迟加载来实现,这样不仅加快的了读取的效率,同时也避免加载不需要的数据。延迟加载通常用于foreach循环读取数据时。

EF中支持延迟加载,是因为
进行查询,返回DbQuery类

为了展示延迟加载,所以
使用 sql server profiler
进行查看
数据的查询。

Sql server profiler 用于监视 sql的连接执行情况。建立一个新的跟踪。

当我们使用DbContext类对EF进行操作时候:

已经执行完查询了,但是
查询跟踪器里面为空:

只有在使用查询结果的时候,EF才会去执行sql语句。

EF对是对实体进行操作,映射到数据库。其实,就是要想对数据库进行操作 直接 对实体 就行操作就行了。

更符合面向对象的思想了。

直接加载的思想:

1、声明变量

2、要查询的条件

3、根据查询条件  去查询 然后 把结果存放在变量中

用的时候,直接把变量拿过来用

延迟加载的思想:

1、声明变量

2、输入要查询的条件

用的时候,把变量和条件 都拿过来,执行完后 在用

两种思想,分别处理不同的情况。就和 真假分页 是一个道理。

1、如果是在foreach循环中加载数据,那么使用延迟加载会比较好,因为不需要一次性将所有数据读取出来,这样虽然有可能会造成n次数据库的查询,但是基本上在可以接受的范围内。

2、如果在开发时就可以预见需要一次性加载所有的数据,包含关联表的所有数据,那么使用使用贪婪加载是比较好的选择,但是此种方式会导致效率问题,特别是数据量大的情况下。

时间: 2024-11-04 10:42:32

EntityFramework 延迟加载的相关文章

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

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

EntityFramework Core 1.1有哪些新特性呢?

前言 在项目中用到EntityFramework Core都是现学现用,及时发现问题及时测试,私下利用休闲时间也会去学习其他未曾遇到过或者用过的特性,本节我们来讲讲在EntityFramework Core 1.1中出现了哪些新特性供我们使用. EntityFramework Core 1.1新特性探讨 DbSet.Find 在EF 6.x中也有此方法的实现,在EF Core 1.1中也同样对此方法进行了实现,为什么要拿出来讲呢,当然也有其道理,我们一起来看看.在         public 

EntityFramework学习

本文档主要介绍.NET开发中两项新技术,.NET平台语言中的语言集成查询技术 - LINQ,与ADO.NET中新增的数据访问层设计技术ADO.NET Entity Framework.ADO.NET的LINQ to Entity部分以LINQ为基础,为了完整性首先介绍LINQ技术. 预备知识 LINQ技术 LINQ是.NET 3.5中新增的一种技术,这个技术扩展了.NET平台上的编程语言,使其可以更加方便的进行数据查询,单纯的LINQ技术主要完成对集合对象(如System.Collection下

Learning EntityFramework(3)

Code First New Database 创建表类型和里面的列 int类型默认为主键类型?? 有两种类型的属性,Navigation属性(定义了对象间的关系)和Scalar属性 使用virtual关键词的属性将被延迟加载,通常被使用在Navigation属性上. 添加EntityFramework的引用 添加以DbContext类为基类的Context类,这个Context类型可以被看作为一个数据库的会话.并在Context类中定义每个对象类型的DbSet<T>属性,用来查询对应类型的实

EntityFramework Core 1.1有哪些新特性呢?我们需要知道

前言 在项目中用到EntityFramework Core都是现学现用,及时发现问题及时测试,私下利用休闲时间也会去学习其他未曾遇到过或者用过的特性,本节我们来讲讲在EntityFramework Core 1.1中出现了哪些新特性供我们使用. EntityFramework Core 1.1新特性探讨 DbSet.Find 在EF 6.x中也有此方法的实现,在EF Core 1.1中也同样对此方法进行了实现,为什么要拿出来讲呢,当然也有其道理,我们一起来看看.在仓储中我们实现Find这个方法,

关于这段时间学习 EntityFramework的 一点感悟

Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然比当年好多了. 当年也就是12年的时候,实体类是乱七八糟的一大堆,属性里是带功能的,不是单纯的实体类.而且,其他数据库支持的不是特别好.现在,实体类清丽了 很多,想着,用一下吧,却又把我吓到了,其实也没有特别的不好,只是太乱了. EF 官方的增删该查,最好的就是查询,剩下的三个,不敢恭维,基本的功能

EntityFramework之领域驱动设计实践

EntityFramework之领域驱动设计实践 - 前言 EntityFramework之领域驱动设计实践 (一):从DataTable到EntityObject EntityFramework之领域驱动设计实践 (二):分层架构 EntityFramework之领域驱动设计实践 (三):案例:一个简易的销售系统 EntityFramework之领域驱动设计实践 (四):存储过程 - 领域驱动的反模式 EntityFramework之领域驱动设计实践 (五):聚合 EntityFramewor

EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

EntityFramework Core 1.1方法理论详解 当我们利用EF Core查询数据库时如果我们不显式关闭变更追踪的话,此时实体是被追踪的,关于变更追踪我们下节再叙.就像我们之前在EF 6.x中讨论的那样,不建议手动关闭变更追踪,对于有些特殊情况下,关闭变更追踪可能会导致许多问题的发生. 实体状态 对于EF Core 1.1中依然有四种状态,有的人说不是有五种状态么,UnChanged.Added.Modified.Deleted.Detached.如果我们按照变更追踪来划分的话,实际

EntityFramework 7.0之初探【基于VS 2015】(十)

前言 本篇作为EF 7.0的开篇也是Entity Framework目前系列末篇,因为关于EF 7.0学习资料实在是太少,我都是参考老外的资料花费了不少时间去研究去尝试同时也失败多次,个人觉得那是值得的,至少为今后在VS2015上来运用EF 7.0打下了坚定的基础,但是有些很深入的层面还得待EF 7.0比较成熟时再来补充及学习,当然在前面EF 6.0或6.1中系列中如果我发现又有好的内容也会进行适当补充同时也和大家一起学习以及分享.文中若有不妥之处或错处请指出.[注意]下面所演示代码都是基于VS