天天看点

[Nhibernate]Nhibernate系列之体系结构

在项目中也有用到过nhibernate但对nhibernate的认识,也存留在会用的阶段,从没深入的学习过,决定对nhibernate做一个系统的学习。

对象-关系映射(object/relation

mapping,简称orm),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(orm)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。(百度百科)

nhibernate 是一个基于.net 的针对关系型数据库的对象持久化类库。nhibernate

来源于非常优秀的基于java的hibernate 关系型持久化工具。

nhibernate 从数据库底层来持久化你的.net

对象到关系型数据库。nhibernate 为你处理这些,远胜于你不得不写sql去从数据库存取对象。你的代码仅仅和对象关联,nhibernat

自动产生sql语句,并确保对象提交到正确的表和字段中去。(百度百科)

[Nhibernate]Nhibernate系列之体系结构

上图展示了nhibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化对象)。

两种体系

轻型体系,应用程序自己提供ado.net连接,并且自行管理事务。这种方式使用了nhibernate

api的一个最小子集。

[Nhibernate]Nhibernate系列之体系结构

全面解决体系,对于应用程序来说,所有的底层ado.net

api都被抽象了,所有的细节都让nhibernate来做。

[Nhibernate]Nhibernate系列之体系结构

常用对象

sessionfactory(nhibernate.isessionfactory):对属于单一数据库的编译过的映射嗯间的一个线程安全的,不可变的缓存快照。它是session的工厂,是connectioprovider的客户。可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存可以在事务中重用的数据。

会话session(nhibernate.isession):单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。封装了一个ado.net连接。也是transaction的工厂。保存有必需的(第一级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。

持久化对象(persistent)及其集合(collection):生命期短促的单线程对象,包含了持久化状态和商业功能。它们可能是普通的对象,唯一特别的是他们现在从属于且仅从属于一个session。一旦session被关闭,他们都将从session中取消联系,可以在任何程序层自由使用(比如,直接作为传送到表现层的dto,数据传输对象)。

临时对象(transient

object)及其集合(collection):目前没有从属于一个session的持久化类的实例。它们可能是刚刚被程序实例化,还没来得及被持久化,或者是被一个已经关闭的session所实例化的。

事务transaction(nhibernate.itransaction):(可选)单线程,生命期短促的对象,应用程序用它来表示一批工作的原子操作。是底层的ado.net事务的抽象。一个session某些情况下可能跨越多个transaction事务。

connectionprovider(nhibernate.connectin.connectionprovider):(可选)ado.net连接的工厂,从底层的idbconnection抽象而来。对应用程序不可见,但可以被开发者扩展/实现。

transactionfactory(net.sf.hibernate.transactionfactory):(可选)事务实例的工厂,对应用程序不可见,但可以被开发者扩展/实现。

通过图可以看出,轻型结构中没有使用transaction/transactionfactory或connectionprovider

api,直接和ado.net对话了。

学习orm和nhibernate概念,及nhibernate的结构。

参考

《nhibernate中文文档》