POCO系列之——延迟加载
当我们进行查询的时候,哪些关系的数据将会被加载到内存呢?所有相关的对象都需要吗?在一些场合可能有意义,例如,当查询的实体仅仅拥有一个相关的子实体,但是,多数情况下,你可能只需要加载部分数据,或者你喜欢的话,加载更多的数据。
在EF4中支持延迟加载功能,那POCO是否也支持延迟加载呢。这个答案是肯定的。在POCO中支持延迟加载必需完成以下两个步骤:
1、在需要延迟加载的属性前加上virtual ,该属性的类型可以是任务的集合类型ICOLLOCT<T>或者是0/1..1关联属性。
例如,更新Category实体类,使之支持延迟加载
|
1
2
3
4
5
6
7
|
public class Category{ public int CategoryID { get; set; } public string CategoryName { get; set; } public string Description { get; set; } public byte[] Picture { get; set; } public virtual List<Product> Products { get; set; } ... |
2、在context构造器中开启延迟加载功能:
public NorthwindContext() : base("name=NorthwindEntities", "NorthwindEntities"){ ContextOptions.LazyLoadingEnabled = true; _categories = CreateObjectSet<Category>(); _products = CreateObjectSet<Product>();} |
由于集合是 POCO 的集合,所以,在访问的时候没有事件发生,EF 通过从你定义的实体派生一个动态的对象,然后覆盖你的子实体集合访问属性来实现。这就是为什么需要标记你的子实体集合属性为 virtual 的原因。
在工程中进行调试,你会发现实例与你声明的类型不一至
![]()
延迟加载优缺点;
延迟加载:
- 非常宽容,因为只在需要的时候加载数据,不需要预先计划
- 可能因为数据访问的延迟而降低性能,考虑到每访问父实体的子实体时,就需要访问数据库。
POCO系列之——延迟加载的更多相关文章
- EF之POCO应用系列3——延迟加载
EF之POCO应用系列4——延迟加载 当我们进行查询的时候,哪些关系的数据将会被加载到内存呢?所有相关的对象都需要吗?在一些场合可能有意义,例如,当查询的实体仅仅拥有一个相关的子实体,但是,多数情况下 ...
- POCO系列之——什么是POCO
做过JAVA的朋友应该对这个比较熟悉了在JAVA中叫POJO,POCO是Plain Old CLR Object的缩写.所谓的POCO就是那些不包括INSERT.ADD.DEL等数据持久化操作的以及不 ...
- 【mybatis深度历险系列】延迟加载
在前面的博文中,小编主要简单的介绍了mybatis中的高级映射,小伙伴们可以把mybatis和hibernate的因素进行对比,更加有利于理解.今天这篇博文,小编主要来简单介绍一下mybatis中的延 ...
- [NHibernate]延迟加载
目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方 ...
- Linq之延迟加载特性
目录 写在前面 系列文章 延迟加载 总结 写在前面 上篇文章介绍了linq中常见的几个关键字,并列举了几个例子,算是对linq如何使用有了初步了解.上篇文章中也提到了,能够使用linq的场合有一个要求 ...
- Entity Framework 学习总结之十一:POCO
POCO Entity Framework 4.0 为实体提供了简单传统 CLR 对象( Plain Old CLR Object / POCO )支持.实体对象可以独立于 EF 存在,由此 EF 更 ...
- 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
[原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:08 ...
- EntityFrame Work 5 性能注意事项(转自MSDN)
1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍 ...
- EF提高性能
实体框架 5 性能注意事项 作者:David Obando.Eric Dettinger 等 发布时间:2012 年 4 月 1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便 ...
随机推荐
- sharedMesh变量
在unity引擎中, 一般情况不建议用sharedMesh变量去写操作,建议只读,因为那会对mesh永久改变 变
- Php 关于构造函数
子类在继承父类后,会拥有父类的属性和方法,这是继承的特性. 子类在构造函数会首先调用父类的构造函数来实例化父类的属性,然后调用子类的构造函数,一般你不写,并不表示没有调用,而是首先调用了父类的无参构造 ...
- iOS10 CAAnimationDelegate的适配
最近在xcode8打开之前的动画代码,看到如下警告
- [UWP小白日记-5]转换MVA学院的XML字幕为SRT
开源地址:第二版开源地址GIT 暂时用不了了,在最新的WIN10 10586.494系统上回闪退,正在酝酿第二版 O(∩_∩)O哈哈~ 新版已经完工:第二版 地方MVA上好多教程,但是微软的所有中国网 ...
- CentOS 7 systemd service开机启动设定
#vi /etc/systemd/system/xxx.service [Unit] Description=startup script test [Service] Type=simple Exe ...
- ActiveMQ in Action(6) - Features
关键字: activemq 2.6 Features ActiveMQ包含了很多功能强大的特性,下面简要介绍其中的几个.2.6.1 Exclusive Consumer Queue中的消息 ...
- 通过一个表的id同时查询多个表的数据
'select c.字段名,x.字段名 as 改为新的显示名,x.字段名 from 表名1 b,表名2 c,表名3 x where b.字段id=' . $id . ' and b.`字段id`=c. ...
- SAP HANA 创建属性视图
[Step By Step]SAP HANA创建属性视图(Attribute View) Demo Instruction: 从一张用户信息表中组合出相信地址. 1. 在modeler窗口中,找到相应 ...
- 【转载】__name__ == "__main__": 你认识我么?
<笨方法学Python>的习题50中,脚本ex50.py最后一行代码就是 if __name__ == "__main__": 那么,这句代码到底有什么用呢? 莫急莫急 ...
- Struts2中一个自定义拦截器的使用
1.自定义的拦截器的类: package it.web.interceptor; import com.opensymphony.xwork2.ActionContext; import com.op ...