本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程。关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文文档自身就不完善,所以汉化后也是不全。菩提树在一篇《NHibernate学习之路》随笔中谈到了学习NHibernate遇到的困难,也希望大家把自己在使用NHibernate中的经验和心得能够共享出来,与大家分享。另外我也是刚开始接触NHiernate,有错误之处还请大家指点。

第一步:准备数据表

在这里用一个最简单的例子,有一张关于的用户的表,有编号,姓名,密码,Email地址和最后一次的登录时间几个字段。
Create Table Users(
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    LogonID 
varchar(20Primary key,
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    Name 
varchar(40),
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    Password 
varchar(20),
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    EmailAddress 
varchar(40) ,
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    LastLogon 
datetime
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee))

第二步:创建需要被持久化的类

.NET中创建一个NHibernateWebDemo.Model的工程,添加User实体类。

//User.cs
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)

基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
namespace NHibernateWebDemo.Model
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
}

第三步:创建持久化映射文件

该文件的命名为User.hbm.xml,并且与User.cs放在同一个目录里。设置该文件的生成操作属性为“嵌入的资源”,这一点要切记。另外,使用编号当作主键,由用户输入,所以在映射文件中用assigned
<?xml version="1.0" encoding="utf-8" ?>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)        
<class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users">
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<id name="Id" column="LogonId" type="String" length="20"> 
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)                       
<generator class="assigned" /> 
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
</id>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<property name="UserName" column= "Name" type="String" length="40"/> 
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<property name="Password" type="String" length="20"/> 
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<property name="EmailAddress" type="String" length="40"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<property name="LastLogon" type="DateTime"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)        
</class>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
</hibernate-mapping>

第四步:进行配置文件的设置

在配置文件中,我们要告诉NHibernate所使用的数据库是什么,以及如何连接该数据库。
<configSections>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)    
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)  
</configSections>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
<nhibernate>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<add key="hibernate.connection.provider"          
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)                       value
="NHibernate.Connection.DriverConnectionProvider"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<add key="hibernate.dialect"                      
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)                       value
="NHibernate.Dialect.MsSql2000Dialect"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<add key="hibernate.connection.driver_class"          
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)                       value
="NHibernate.Driver.SqlClientDriver"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)               
<add key="hibernate.connection.connection_string" 
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)                       value
="server=.;uid=sa;pwd=sa;database=test"/>
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)        
</nhibernate>

第五步:编写数据访问层的公用类

在这里,编写了两个公用的类,分别进行Session的创建和实体的操作。在这两个类中用单件模式,来限制Session的创建。为了做到与具体的应用程序无关,在这里把程序集的名称作为参数,传递给OpenSession()方法。可以把这两个类单独放在一个名为Common的工程下,这里先把它们放在DAL层中。这两个类只是个人的一种写法,大家可以自行去编写。
//SessionFactory.cs
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)

基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System.Reflection;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System.Data;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernate;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernate.Cfg;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernate.Tool.hbm2ddl;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
namespace NHibernateWebDemo.DAL
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
}

第六步:编写数据访问层

创建一个名为NHibernateWebDemo.DAL的工程,数据访问层的代码编写非常简单,在创建EntityControl的实例时,需要把Model的程序集名称作为参数传入,可以通过配置文件来避免程序集名称的硬编码。
//UserDAL.cs
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)

基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System.Collections;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernateWebDemo.Model;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
namespace NHibernateWebDemo.DAL
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
}

第七步:编写业务逻辑层

建立NHibernateWebDemo.BLL工程,为了简单期间,在业务逻辑层中我没有做任何的业务检测。

基于NHibernate的三层结构应用程序开发初步 (转Terrylee)//UserBLL.cs
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)

基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using System.Collections;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernateWebDemo.DAL;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
using NHibernateWebDemo.Model;
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
namespace NHibernateWebDemo.BLL
基于NHibernate的三层结构应用程序开发初步 (转Terrylee)
}

相关文章: