[NHibernate]延迟加载】的更多相关文章

NHibernate 延迟加载与立即加载 (第七篇) 一.延迟加载 延迟加载可以理解为:当需要用的时候才加载. 假设我们数据库有一个Person对象,一个Country对象,其中Person属于Country,一对多关系.当我们Get()一个 Person对象的时候.并不立即把Country对象也加入来,而是当我们的代码执行到要通过Person调用Country对象的时 候,NHibernate才到数据库去查询对应的Country对象,这就叫延迟加载.相反,如果我们Get()一个Person对象…
目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方式,延迟加载按个人理解也可以叫做按需要加载(Loading-on-demand). 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R…
摘要 NHibernate的延迟加载机制是很重要的内容.通过关系映射将数据库表之间的关系映射成对象之间的关系,如果没有延迟加载机制,从主表的一个对象的查询将直接查询出所有与该对象关联的其他对象,如果关联的对象上还有其他的关联对象,还要去查询其他的对象.如果这张“网”非常大,或者关联的数据库记录非常多的话,每次查询主表记录都要把整个数据库都查询一遍,这样效率会非常低下.为了解决这个问题产生了NHibernate延迟加载.对一些属性设置延迟加载,只在对象访问到这些属性的时候才去查询数据库,很大程度上…
写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总结这个系列,确实收获不小,这里将本系列的导航,列出放在这里算是对nhibernate系列的一个小总结,也方便想学习nhibernate的朋友查找. nhibernate文档 文档部分是从网上搜集,认为还是比较全面的,就在博客上做了记录,也希望在用到的时候,有个地方可以方便的查找. [Nhiberna…
概念 什么是延迟加载:所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作.可以简单理解为,只有在使用的时候,才会发出sql语句进行查询,数据是分N次读取. 什么是立即加载:所谓立即加载既是所有的相关数据一次被读取出来,而不是分N次. 一.延迟加载:NHibernate延迟加载须有Session存在,且配置为Lazy=true(默认) DAL中编写方法如下: //延迟加载 public Order LazyLoad() { //返回order对象后ISession将继续存在 retur…
目录 写在前面 文档与系列文章 立即加载 一个例子 总结 写在前面 上篇文章介绍了nhibernate延迟加载的相关内容,简单回顾一下延迟加载,就是需要的时候再去加载,需要的时候再向数据库发出sql指令进行查询. 本篇文章介绍的立即加载,则和延迟加载相对,举个简单的例子,就是查询客户信息,则会将该客户相关联的数据立即进行加载.实现立即加载的方式有三种:设置映射文件中节点的可选属性lazy,Nhibernate提供的实用类,HQL抓取策略. 文档与系列文章 [Nhibernate]体系结构 [NH…
目录 写在前面 文档与系列文章 视图 一个例子 总结 写在前面 前面的文章主要讲了对物理数据表的操作,当然了Nhibernate同样可以操作视图,本文将讲nhibernate对视图操作的种种. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]集合类(Collections)映射  [NH…
目录 写在前面 文档与系列文章 N+1 Select查询问题分析 总结 写在前面 在前面的文章(延迟加载,立即加载)中都提到了N+1 Select的问题,总觉得理解的很不到位,也请大家原谅,这也是为什么单独将该问题拿出来做分析的原因.nhibernate的默认Lazy加载方式是解决N+1 select问题的一种方案,而我自身的理解是立即加载可以解决,完全的背道而驰了.写出那篇文章后,对这个问题,一直念念不忘,总觉得哪地方不对劲.由于我对问题的理解很不透彻,也同样造成你的误解,真的很抱歉. 文档与…
目录 写在前面 文档与系列文章 Nhibernate中使用存储过程 一个例子 总结 写在前面 上篇文章一个小插曲,分析了延迟加载是如何解决N+1 select查询问题的.这篇开始介绍在nhibernate中如何使用存储过程,同时也介绍如何使用代码生成器,提高开发效率. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping…
目录 写在前面 文档与系列文章 创建对象 更新对象 总结 写在前面 上篇文章介绍了如何使用MyGeneration代码生成器生成存储过程,以及nhibernate中通过存储过程删除数据的内容,这篇文章将介绍如何创建对象,更新对象. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]集合类(…
目录 写在前面 文档与系列文章 查询 总结 写在前面 前面的文章介绍了在nhibernate中使用存储过程进行增删改的操作,当然查询也是可以的,在nhibernate中也可以执行任意的存储过程.本篇文章将介绍如何使用查询的存储过程的方式. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]…
目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例子比较简单,字段比较少,如果一个数据表有几十个字段,你手敲的话烦都烦死了,不过为了学习nhibernate的语法,初学的过程还是建议自己动手,这样敲的多了就对每个过程,及映射文件中的节点的含义有个大致印象.前面举的例子,你也会发现这种方式的步骤就是首先创建数据库,然后编写持久化类,映射文件,最后编写…
目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内容.本篇文章将继续介绍工具SchemaExport和SchemaUpdate.说实话,这东西我也是第一次使用,也只能边摸索,边学习了. 一般的开发模式是先将数据库架构设计好,然后再编写持久化类和映射文件,也就是数据库驱动的模式.然而也可以先编写持久化类和映射文件,然后通过SchemaExport工具…
目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章也只能先躺在收藏夹里,慢慢去消化了.废话不多说了,进入正题,那么这篇文章就让我们接着学习SchemaExport工具的使用吧,如何使用SchemaExport为表添加约束,生成存储过程,生成视图? 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactor…
目录 写在前面 文档与系列文章 对象状态 瞬时态(Transient) 持久态(Persistent) 托管态(Detached) 对象状态转换 总结 写在前面 前面两篇文章介绍了SchemaExport工具的使用,使用该工具可以根据映射文件生成数据库架构,这篇文章将介绍nhibernate中的三种对象状态. 在程序运行过程中,使用对象的方式操作数据库的同时,必然会产生一系列的持久化对象.这些对象可能是刚刚创建并准备进行存储的,也有可能是从数据库进行查询得到的,为了区别这些对象,根据对象和当前S…
目录 写在前面 文档与系列文章 一级缓存 一个例子 一级缓存管理 总结 写在前面 上篇文章介绍了nhibernate中对象的三种状态,通过对象的三种状态,很容易想到缓存. 什麽是缓存? 有时候,某些数据是会经常需要访问的,像硬盘内部的缓存(暂存器的一种)会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输.说白了,缓存是用空间换取时间的一种技术. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibern…
目录 写在前面 文档与系列文章 二级缓存 Nhibernate二级缓存提供程序 一个例子 总结 写在前面 上篇文章介绍了nhibernate中一级缓存的相关内容,一级缓存过期时间和ISession对象的生命周期相同,并且不同的Session不能共享缓存,一级缓存也可以成为ISession缓存.那么现在我们就学一下nhibernate中的二级缓存,即ISessionFactory级别缓存,可被所有的ISession所共享.二级缓存是可扩展的,在http://sourceforge.net/proj…
目录 写在前面 文档与系列文章 更新数据 二级缓存管理 总结 写在前面 本篇文章也算nhibernate入门系列的结尾了,在总结nhibernate系列的过程中,遇到了很多问题,学习的过程也是解决bug的过程,在学习nhibernate的过程中还学习了单元测试的使用,这个是附属产品,我也没有想到,算是意外收获吧.这个系列学完了,正好公司有个项目,马上就要立项,正好能将学到的东西运用到实际的项目中,想想就让人激动.当然,我相信在实际的项目中,肯定还会遇到问题,但是通过本系列的学习,我已经不怕遇到b…
1.在数据库中新建表格,并插入记录,SQL如下: USE WFC_DB GO create table Students ( Id ,) not null, Name ), Age int, Score int ) GO , ) , ) 注意:表的Id字段设为自增长,即 IDENTITY(1,1) 2.新建类库项目,添加实体类与映射文件 实体类 Student.cs: public class Student { public virtual int Id { get; set; } publi…
本节内容 引入 立即加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过上一篇的介绍,我们知道了NHibernate中默认的加载机制——延迟加载.其本质就是使用GoF23中代理模式实现,这节我们简单分析NHibernate另一种加载机制——立即加载.我用一张图片形象的展现立即加载机制. 立即加载 顾名思义,就是立刻加载相关联对象集合,与延迟加载相反.我们可以使用三种方法来立即加载,分别是:可选的lazy属性.NHibernate提供的实用类.HQL抓取策略.下面依次用实例分析…
NHibernate系列 写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总结这个系列,确实收获不小,这里将本系列的导航,列出放在这里算是对nhibernate系列的一个小总结,也方便想学习nhibernate的朋友查找. nhibernate文档 文档部分是从网上搜集,认为还是比较全面的,就在博客上做了记录,也希望在用到的时候,有个地方可以方便的…
[Nhibernate]二级缓存 目录 写在前面 文档与系列文章 二级缓存 Nhibernate二级缓存提供程序 一个例子 总结 写在前面 上篇文章介绍了nhibernate中一级缓存的相关内容,一级缓存过期时间和ISession对象的生命周期相同,并且不同的Session不能共享缓存,一级缓存也可以成为ISession缓存.那么现在我们就学一下nhibernate中的二级缓存,即ISessionFactory级别缓存,可被所有的ISession所共享.二级缓存是可扩展的,在http://sou…
华丽的NHibernate http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 华丽的NHibernate NHibernate 帮助类(单例实际运用) 摘要: 在NHibernate中,ISessionFactory是线程安全的,对应一个数据库.它是生成ISession的工厂.而ISession是线程不安全的. 创建一个ISessionFactory需要消耗比较多的资源.因此,我们只在程序初始化的时候创建一次,以后就…
本节内容 引入 立即加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过上一篇的介绍,我们知道了NHibernate中默认的加载机制--延迟加载.其本质就是使用GoF23中代理模式实现,这节我们简单分析NHibernate另一种加载机制--立即加载.我用一张图片形象的展现立即加载机制. 立即加载 顾名思义,就是立刻加载相关联对象集合,与延迟加载相反.我们可以使用三种方法来立即加载,分别是:可选的lazy属性.NHibernate提供的实用类.HQL抓取策略.下面依次用实例分析…
原文地址:Must Everything Be Virtual With NHibernate? 老赵在博文中 我对NHibernate的感受(2):何必到处都virtual 提到这篇文章,顺便翻译一下. 如果你使用过 NHibernate 2.0 或者以后的版本,毫无疑问你将会遇到过几次下面的异常: NHibernate.InvalidProxyTypeException: The following types may not be used as proxies: NHibernateEx…
转自:http://www.cnblogs.com/wolf-sun/p/4082899.html 目录 写在前面 文档与系列文章 视图 一个例子 总结 写在前面 前面的文章主要讲了对物理数据表的操作,当然了Nhibernate同样可以操作视图,本文将讲nhibernate对视图操作的种种. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate…
声明 本文欢迎转载,原始地址:http://www.cnblogs.com/DjlNet/p/7603654.html 前言 先说一点废话,在此之前博主也在早期就接触了或者看了些许AOP相关的文章,然后再去做了一些相关的实验,但是始终没有将AOP内化到自己的内功心法当中去,包括从概念还是应用环境,以及当前生态当中的AOP工具等等,所以这里博主还是按照以往的套路,在前人的基础之上学习然后吸收到集成到系统当中去. 什么是AOP 还是先看官方解释:AOP(Aspect-Oriented Program…
1,延迟加载. 延迟加载,即用到的时候再加载数据.这种机制是非常有情怀的,比如一篇中的用户实体有标签.问题等导航属性,如果只是用到用户名去查询整个实体,则把相关的标签和问题也都加载,性能会比较低.而有了延迟加载机制之后就可以做到查询用户实体只加载用户数据,访问到标签或问题等属性的时候再去加载这些数据. 如果使用Linq To NHibernate,则可以使用Linq提供的延迟加载机制,对于这种,是linq提供的机制,就不讨论了. 需要注意的是,如果查询出用户实体之后,关闭了Session.则延迟…
这篇文章 http://ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id One of the more common mistakes that I see people doing with NHibernate is related to how they are loading entities by the primary key. This is because the…
本节内容 引入 延迟加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作.事务.一对多.多对多映射等问题,这篇我们初步探索NHibernate中的加载机制. 在讨论之前,我们看看我们使用的数据模型,回顾一下第二篇建立的数据模型. Customer与Orders是一对多关系,Order与Product是多对多关系.这一篇还是使用这个模型,有关具体配置和映射参考本系列的文章. 延迟加载(Lazy Loadin…