摘要 NHibernate实现事务机制非常简单,调用ISession.BeginTransaction()开启一个事务对象ITransaction,使用ITransaction.Commit()提交事务,使用ITransaction.Rollback()回滚事务. 标准NHibernate事务代码: using (var session = SessionFactory.OpenSession()) { using (var transaction = session.BeginTransact…
摘要 上一节对NHibernate二级缓存做了简单介绍,NHibernate二级缓存是由SessionFactory管理的,所有Session共享.这一节介绍二级缓存其他两个方面:二级缓存查询和二级缓存管理. 1. NHibernate二级缓存查询 NHibernate二级缓存查询是指NHibernate将查询记录的集合放到二级缓存中,之后每次查询都可以从二级缓存中拿查询记录信息. 二级缓存使用步骤: 1)在hibernate.cfg.xml文件中,使用cache.use_query_cache…
摘要 这篇文章介绍NHibernate最实用的内容:关系映射. NHibernate的关系映射方式有三种: Set:无序对象集合,集合中每一个元素不能重复. List:有序对象集合,集合中的元素可以重复. Bag:无序对象集合,集合中的元素可以重复. Map:键值对集合,相当于Hashtable或Dictionary. 这篇文章以一对多关系为例,介绍怎样在NHibernate中建立一对多关系映射.一对多关系是在现实项目中最经常碰到的一种关系.后面文章介绍多对多关系. 这篇文章的附件:NHiber…
摘要 前面文章介绍了NHibernate对简单.net数据类型的映射对照表.NHibernate也可以映射复杂数据类型,这里介绍通过组件映射NHibernate值对象. 1. NHibernate引用对象和NHibernate值对象 NHibernate引用对象:指的是具有主键值的NHibernate实体对象,他必须是另一个NHibernate实体对象的属性.他所属的对象也可以理解为主对象,有一个从属的指向关系.例如:Order对象有个属性Customer,表示这个Order对象是属于哪个Cus…
摘要 NHibernate是一个成熟的开源的面向对象的.net映射框架.大量的实际项目中正在使用该框架.他是建立在ADO.Net基础之上.目前的版本是NHibernate 4.0.4.本系列文章都是基于NHibernate 4.0版本. 1. 什么是ORM? ORM指Object Relational Mapping.他是一种让你可以在面向对象和关系数据库之间互相映射的技术. 现实世界中,每个事物都是对象.我们称具有自己数据属性的事物为对象. 关系世界都是以集合为基础的表和数据行记录.这不同于面…
摘要 NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession.ISessionFactory的生成非常消耗资源,通常都在应用程序启动的时候生成,并使用单例模式,被应用程序的所有线程共享.ISession的生成虽然没有ISessionFactory那么消耗资源,但是Session中保存了一级缓存池,如果每次使用到ISession的时候都生成新的ISession对象,而且这样的操作频率很大的时候,也会一定程度上大量消耗内…
摘要 Nhibernatea缓存非常强大,按照缓存存储在Session对象还是SessionFactory对象分为一级缓存和二级缓存. 一级缓存存在于Session对象里,也叫Session缓存,由Session进行管理.一级缓存是NHibernate内置的缓存. 二级缓存存在于SessionFactory对象里,也叫SessionFactory缓存,由SessionFactory进行管理,并且有大量的第三方dll对他进行扩展,他是一种“可插拔式”的缓存. 这一节主要讲一级缓存,后面一篇文章介绍…
摘要 在实际的项目中,经常是将NHibernate的实体关系映射类做成独立的工程(assembly dll),只对外提供Session调用的接口.这个程序集作为数据访问层,可以被上面的多个工程(ASP.Net.Windows Form.Windows Serviice等)调用. 这篇文章介绍如何设计NHibernate数据访问层的工程,以及如何架构数据访问层和上面的应用层的关系. 本文章的所有代码可以到第一个NHibernate程序下载. 步骤: 1)为了后面文章的程序演示方便,删除Custom…
摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立即查询数据库.当访问对象的属性的时候才查询数据库.在NHibernate里称为Lazy Loding(延迟加载). Load方法得到的对象,如果对象不存在,在访问对象的属性时将抛出异常. 当需要得到实体对象,但是不需要访问对象属性的时候,宜使用Load方法.比如Delete方法: private s…
摘要 NHibernate的多对多关系映射由many-to-many定义. 从这里下载本文的代码NHibernate Demo 1.修改数据库 添加Product表 添加ProductOrder表 数据库表之间的关系: Product和Order之间的关系是多对多关系,一条订单上有多个产品,一个产品可以有多个订单.多对多关系中的中间表(这里是ProductOrder表)不需要在关系映射中定义实体类和映射文件. 实际项目中,Product和Order之间应该不是这种简单的多对多关系,而是有个“订单…