Nhibernate 是一个基于.Net 的针对关系型数据库的对象持久化的类库,Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具.............
一> 将download的Nhibernate 解压,根据项目实际将其bin文件下的相关Dll文件,拷贝到Asp.net项目中Bin文件夹下;
二> 打开web.cofig文件 ,在<configuration>下进行Nhibernate 配置
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<nhibernate>
<add
key="hibernate.show_sql"
value="true"
/>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Server=127.0.0.1;initial catalog=UserTest;User id =sa;Password="
/>
</nhibernate>
三> 编写需要持久化的类User


using System;

namespace Web


{

/**//// <summary>
/// User 需要被持久化的类
/// </summary>
[Serializable]
public class User

{
private int id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;
public User()

{
}
public int Id

{

get
{return id;}

set
{id=value;}
}
public string UserName

{

get
{return userName;}

set
{userName=value;}
}
public string Password

{

get
{return password;}

set
{password=value;}
}
public string EmailAddress

{

get
{return emailAddress;}

set
{emailAddress=value;}

}
public DateTime LastLogon

{

get
{return lastLogon;}

set
{lastLogon=value;}
}
}
}

四> 当然先要建好数据表users;构建持久化对象属性的映射文件User.hbm.xml (将类属性映射为数据表users的字段),注意如是用vs.net 2003编译,则映射文件User.hbm.xml的生成操作要选为"嵌入的资源"
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="Web.User, Web" table="users">
<id name="Id" column="LogonID" type="Int32" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="UserName" column="Name" type="String" ></property>
<property name="Password" column="Password" type="String" ></property>
<property name="EmailAddress" column="EmailAddress" type="string" ></property>
<property name="LastLogon" column="LastLogon" type="DateTime"></property>
</class>

</hibernate-mapping>
五> cs文件利用Nhibernate 的API


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using NHibernate;
using NHibernate.Cfg;
using System.Reflection;
namespace Web


{

/**//// <summary>
/// test1 的摘要说明。
/// </summary>
public class test1 : System.Web.UI.Page

{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.TextBox txt_uName;
protected System.Web.UI.WebControls.TextBox txt_uPassword;
protected System.Web.UI.WebControls.Button btn_OK;
protected System.Web.UI.WebControls.TextBox txt_uEmail;
protected System.Web.UI.WebControls.Label Label3;
private void Page_Load(object sender, System.EventArgs e)

{
// 在此处放置用户代码以初始化页面
}


Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)

{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()

{
this.btn_OK.Click += new System.EventHandler(this.btn_OK_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void btn_OK_Click(object sender, System.EventArgs e)

{
User newUser = new User();

//配置Configuration

Configuration cfg = new Configuration();
cfg.AddAssembly("Web");
// Configuration cfg = new Configuration().Configure();


//创建ISessionFactory
ISessionFactory factory = cfg.BuildSessionFactory();
//定义事务
ITransaction tx = null;
//打开ISession
ISession session = factory.OpenSession();
try

{
//开始事务
tx = session.BeginTransaction();
newUser.UserName = txt_uName.Text.Trim();
newUser.Password = txt_uPassword.Text.Trim();
newUser.EmailAddress = txt_uEmail.Text.Trim();
newUser.LastLogon=DateTime.Now;
// 保存新用户
session.Save(newUser);
tx.Commit();
}
catch(HibernateException ex)

{
if (tx!=null) tx.Rollback();
throw ex;
}
finally

{
//关闭ISession
session.Close();
}

}
}
}
