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();





 

posted on 2011-12-01 14:30  好家伙  阅读(268)  评论(0)    收藏  举报