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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值