NHibernate配置
1 准备工具
NHibernate-GA 下载地址http://sourceforge.net/projects/nhibernate/
NHibernate模板生成 下载地址http://ishare.iask.sina.com.cn/f/5399666.html

2,新建数据库
View Code
create database [TestNHibernatea]
go
USE [TestNHibernatea]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Roles](
[RoleId] [int] IDENTITY(1,1) NOT NULL,
[RoleName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED
(
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
--Users表
USE [TestNHibernatea]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Users](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[LastName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Sex] [varchar](8) COLLATE Chinese_PRC_CI_AS NULL,
[Age] [int] NULL,
[RoleId] [int] NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Users] WITH CHECK ADD CONSTRAINT [FK_Users_Roles] FOREIGN KEY([RoleId])
REFERENCES [dbo].[Roles] ([RoleId])
GO
ALTER TABLE [dbo].[Users] CHECK CONSTRAINT [FK_Users_Roles]
3,新建ASP.NET网站 添加类库 DLL,BLL Model 层。
使用 模板生成器生成Model层代码,

OutputDirectory 为生成文件的路径。
SourceDarabase 为数据库名称,
Assembly 为配置文件里相关属性设置,
Namespace为类的命名空间。
将生成的.XML文件和.cs文件复制到Model层
.XML 文件 文件生成操作必须是 嵌入的资源。
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ProjectModel
{
[Serializable]
public class Roles
{
public virtual int RoleId { get; set; }
public virtual string RoleName { get; set; }
public virtual IList Users { get; set; }
}
}
在WEB层添加引用

在DLL层引用 NHibernate.DLL文件 和Model层
在BLL引用 DLL和Model层
DLL层新建NHibernateSession
View Code
private static Configuration cfg;
private static ISessionFactory factory;
private object _lockObj;
public NHibernateSession()
{
cfg = new Configuration().Configure();
factory = cfg.BuildSessionFactory();
_lockObj = new object();
}
private ISession session;
public ISession Session
{
get
{
lock (_lockObj)
{
if (session == null)
{
session = factory.OpenSession();
}
}
return session;
}
}
/// <summary>
/// 操作新增的公共方法
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int AddObject(object obj)
{
int result = 0;
ITransaction tran = Session.BeginTransaction();
try
{
Session.Save(obj);
tran.Commit();
result = 1;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
Session.Close();
}
return result;
}
/// <summary>
/// 删除的公共方法
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int DeleteObject(object obj)
{
int result = 0;
ITransaction tran = Session.BeginTransaction();
try
{
Session.Delete(obj);
tran.Commit();
result = 1;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
Session.Close();
}
return result;
}
/// <summary>
/// 更新的公共方法
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int UpdateObject(object obj)
{
int result = 0;
ITransaction tran = Session.BeginTransaction();
try
{
Session.Update(obj);
tran.Commit();
result = 1;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
Session.Close();
}
return result;
}
}
新增业务逻辑层
View Code
public class ProjectUserDLL
{
NHibernateSession nb = new NHibernateSession();
public IList<Roles> GetRoles()
{
string hql = "from Roles";
List<Roles> list = (List<Roles>)nb.Session.CreateQuery(hql).List<Roles>();
return list;
}
public IList<Users> GetUsers()
{
string hql = "from Users";
List<Users> list = (List<Users>)nb.Session.CreateQuery(hql).List<Users>();
return list;
}
}
新增BLL层
View Code
public class ProjectUserBLL
{
ProjectUserDLL dll = new ProjectUserDLL();
public IList<Roles> GetRoles()
{
return dll.GetRoles();
}
public IList<Users> GetUsers()
{
return dll.GetUsers();
}
}
在WEB层Bin目录下新增hibernate.cfg.xml文件用于数据库配置
View Code
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
Data Source=127.0.0.1;Initial Catalog=TestNHibernatea;uid=sa;Password=sa;
</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="proxyfactory.factory_class">
NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle
</property>
<mapping assembly="ProjectModel"/>
</session-factory>
</hibernate-configuration>
页面调用
View Code
ProjectUserBLL p = new ProjectUserBLL();
this.Store1.DataSource = p.GetRoles();
this.Store1.DataBind();

浙公网安备 33010602011771号