博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF之POCO应用系列3——延迟加载
阅读量:5217 次
发布时间:2019-06-14

本文共 1031 字,大约阅读时间需要 3 分钟。


    当我们进行查询的时候,哪些关系的数据将会被加载到内存呢?所有相关的对象都需要吗?在一些场合可能有意义,例如,当查询的实体仅仅拥有一个相关的子实体,但是,多数情况下,你可能只需要加载部分数据,或者你喜欢的话,加载更多的数据。

    在EF4中支持延迟加载功能,那POCO是否也支持延迟加载呢。这个答案是肯定的。在POCO中支持延迟加载必需完成以下两个步骤:

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

例如,更新Category实体类,使之支持延迟加载

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

public
NorthwindContext() :
base
(
"name=NorthwindEntities"
,
"NorthwindEntities"
)
{
    
ContextOptions.LazyLoadingEnabled =
true
;
    
_categories = CreateObjectSet<Category>();
    
_products = CreateObjectSet<Product>();
}

由于集合是 POCO 的集合,所以,在访问的时候没有事件发生,EF 通过从你定义的实体派生一个动态的对象,然后覆盖你的子实体集合访问属性来实现。这就是为什么需要标记你的子实体集合属性为 virtual 的原因。

在工程中进行调试,你会发现实例与你声明的类型不一至

延迟加载优缺点;

延迟加载:

  • 非常宽容,因为只在需要的时候加载数据,不需要预先计划
  • 可能因为数据访问的延迟而降低性能,考虑到每访问父实体的子实体时,就需要访问数据库。

转载于:https://www.cnblogs.com/tianboblog/p/3227426.html

你可能感兴趣的文章
五.Hystrix请求缓存(request cache)
查看>>
Python+OpenCV图像处理之图像金字塔
查看>>
你的日志组件记录够清晰嘛?--自己开发日志组件 Logger
查看>>
简版的文件传输
查看>>
input(Text)控件作为填空输入,但运行后,有曾经输入的记录显示,用autocomplete="off"解决...
查看>>
Java多线程
查看>>
长春理工大学第十四届程序设计竞赛(重现赛)J
查看>>
统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数...
查看>>
leetcode36 有效数独
查看>>
jQuery选择器和遍历的总结
查看>>
ThreadPerMessagePattern——关于匿名内部类
查看>>
osg 3ds模型加载与操作
查看>>
[转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?...
查看>>
[转]Whirlwind Tour of ARM Assembly
查看>>
python socket.error: [Errno 10054] 解决方法
查看>>
JavaScript 高级篇之函数 (五)
查看>>
本周个人总结
查看>>
C# 中在Form控件创建以外的线程操作控件问题
查看>>
改写二分搜索算法及对于问题的理解
查看>>
Java-分治算法
查看>>