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 { getset; }   

     public string CategoryName { getset; }   

     public string Description { getset; }  

     public byte[] Picture { getset; }  

     public virtual List<Product> Products { getset; }

     ...

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

public NorthwindContext() : base("name=NorthwindEntities", "NorthwindEntities")

{

    ContextOptions.LazyLoadingEnabled = true;

    _categories = CreateObjectSet<Category>();

    _products = CreateObjectSet<Product>();

}

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

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

延迟加载优缺点;

延迟加载:

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

POCO系列之——延迟加载的相关文章

JavaWeb系列——Hibernate——延迟加载(转)

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能. 下面先来剖析 Hibernate 延迟加载的"秘密". 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时,完成所有集合属性的抓取,将

POCO系列之——什么是POCO

做过JAVA的朋友应该对这个比较熟悉了在JAVA中叫POJO,POCO是Plain Old CLR Object的缩写.所谓的POCO就是那些不包括INSERT.ADD.DEL等数据持久化操作的以及不包括任何业务逻辑功能的原始类.只包含最基本的GETTER 和SETTER如下类: public class Category { public int CategoryID { get; set; } public string CategoryName { get; set; } public s

jquery插件系列之延迟加载

先上代码 enum LazyMode { once, // 执行一次模式 every //永久执行模式 } class LazyItem { constructor( public element: JQuery, public callback: Function, public mode: LazyMode = LazyMode.once, public diff: number = 0 ) { } private _lastHeight: number; // 上次执行的高度 /** *

[NHibernate]延迟加载

目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方式,延迟加载按个人理解也可以叫做按需要加载(Loading-on-demand). 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R

Linq之延迟加载特性

目录 写在前面 系列文章 延迟加载 总结 写在前面 上篇文章介绍了linq中常见的几个关键字,并列举了几个例子,算是对linq如何使用有了初步了解.上篇文章中也提到了,能够使用linq的场合有一个要求:实现IEnumerable<T>泛型接口,或者类型兼容(可以通过Cast方法转换,比如ArrayList). 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类 Linq之扩展方法 Linq之Expression初见 Lin

MyBatis 系列文章

一.MyBatis系列:第一个MyBatis工程 二.MyBatis系列:全局配置文件详解 三.MyBatis系列:Mapper映射详解 四.MyBatis系列:原始Dao方式开发 五.MyBatis系列:动态代理方式开发 六.MyBatis系列:注解方式开发 七.MyBatis系列:延迟加载 八.MyBatis系列:一级缓存的使用 九.MyBatis系列:二级缓存的使用 十.MyBatis系列:与Spring的整合 十一.MyBatis系列:逆向工程(自动生成代码) 十二.MyBatis系列:

EF提高性能

实体框架 5 性能注意事项 作者:David Obando.Eric Dettinger 等 发布时间:2012 年 4 月 1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍在使用实体框架开发应用程序时的性能注意事项,使开发人员了解能够影响性能的实体框架内部算法,以及提供有关进行调查及在使用实体框架的应用程序中提高性能的提示.网络上有大量很好的有

EntityFrame Work 5 性能注意事项(转自MSDN)

1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍在使用实体框架开发应用程序时的性能注意事项,使开发人员了解能够影响性能的实体框架内部算法,以及提供有关进行调查及在使用实体框架的应用程序中提高性能的提示.网络上有大量很好的有关性能的主题,我们还尽可能地指出这些资源的链接. 性能是一个很微妙的主题.对于使用实体框架的应用程序,可将本白皮书作为资源来帮

实体框架 5 性能注意事项

1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍在使用实体框架开发应用程序时的性能注意事项,使开发人员了解能够影响性能的实体框架内部算法,以及提供有关进行调查及在使用实体框架的应用程序中提高性能的提示.网络上有大量很好的有关性能的主题,我们还尽可能地指出这些资源的链接. 性能是一个很微妙的主题.对于使用实体框架的应用程序,可将本白皮书作为资源来帮