Nhibernate 使用
Posted 逍遥帝君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nhibernate 使用相关的知识,希望对你有一定的参考价值。
一:介绍
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。
NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。
二:ORM
对象-关系映射(OBJECT/RELATION MAPPING,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
三:常用对象
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) | (可选)事务实例的工厂,对应用程序不可见,但可以被开发者扩展/实现 |
ICriteria | ICriteria是Expression(表达式)数据加载接口,Expression是一个关系表达式组合,通过它能产生SQL语句的Where部分, 用户需要通过ISession来间接调用它。 |
IQuery | IQuery是HQL数据加载接口,HQL(Hibernate Query Language)是NHB专用的面向对象的数据查询语言,它与数据库的SQL有些类似,但功能更强大!同ICriteria一样,也需要通过ISession来间接调用它。 |
四:栗子
Nhibernate支持各大主流的数据库,本文中使用的是mysql数据库。看Nhibernate的配置文件,文件名 NHibernate.cfg.xml
以上是关于Nhibernate 使用的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC、NHibernate 会话和 NHibernate 事件
使用 Fluent NHibernate 和 NHibernate 3 将枚举映射为 Int
NHibernate之(14):探索NHibernate中使用视图