从零开始在.net 中使用 Nhibernate 对数据库
进行操作详细步骤
从学习 NhibernateERP 中,还得知不单只 ADO.NET 能是实现对数据库表进行操作,
还有 Nhibernate、Linq、EntityFramwork 这些技术。算我孤陋寡闻吧。
刚学完 Nhibernate,也折腾了一天才搞好,就拿出来跟大家分享一下吧。
首先我们必须知道的是,NhibernateERP 是 ORM 框架,所谓 ORM 就是 Object Relational Mapping,
是一种将关系型数据库中的数据与面向对象语言中对象建立映射关联的技术。
用 Nhibernate 的好处是什么呢?使用 Nhibernate 操作数据库,我们可以像操作对象一样操作数
据库,Nhibernate 将我们对对象的变更保存到数据库中去,还负责以对象的方式从数据库中查询
数据,好处就是可以使开发人员从处理数据库这里节省时间和精力用于处理业务逻辑。
我们使用的 Nhibernate 框架,可以再官网上找到,www.nhibernate.org 或者 csdn 找咯。我
这里用的版本是 2.1.2.GA 。
一、Nhibernate 目录下的内容
1、Configuration_Templates:存放 Nhibernate 连接数据库的配置文件的示例
根据实制所用的数据库选择示例中的代码并更改其中的数据源即可。
2、Required_Bins:存放 Nhibernate 运行过程中所需要的类库文件(dll)
其中还包含第三方的开源日志框架 Log4Net,这个框架主要用于记录程序日志信息。()
3、Required_For_LazyLoading:存放延时加载特性支持所需的框架文件,在这个文件夹下提供
了三种实现,选择其中一种将其所有的 dll 文件引用到项目中去。在本实例中选择了 Castle
Castel 的核心是个轻量级容器,实现了 IoC 模式的容器,基于此核心容器所建立的应用
程序,可以达到程序组件的松散耦合,让程序组件可以进行测试,这些特性都使得整个应
用程序可以再架构上与维护上都能得到相当程度的简化。(来自百度 )
4、Tests:存放测试试用文件,在此文件夹下有一个名为 ABC.bhm.xml 的文件,这个是数据表
对应配置文件的示例。
二、开始创建第一个程序测试和配置
1、 首先在数据库创建我们的表,表结构如下:
我们先创建一个名为 ERP 的数据库,建表,表名:Person
把如下语句在数据库执行就好了:
USE [ERP]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Person](
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
三、创建一个解决方案命名为 NHIbernateERP
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NULL,
[UserName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[BirtherDate] [datetime] NULL,
[Height] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[Sex] [int] NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
1、在解决方案添加三个项目,分别为 DAL,DomainModel,WebApp
1) 在项目 DomainModel 中分别见两个目录,Entities 和 Mappings 从大意上我们可以知道,
Entities 是放实体类的(持久化类),Mapping 是放映射对象。
持久化类:是指其实例需要被 Hibernate 持久化到数据库中的类。持久化类包含一些属性,有 get 和 set,且属
性名的首字母为大写。
首先我们把 Iesi.Collections 文件引用进来。
Lesi.Collection 类库作用相当于现在的 Linq,提供集合运算功能,且支持泛型。这里我们使用
它 在两个集合里取相同部分的功能。
2)、【Entities】下建立 Person 类
代码如下,我们只要求包含 get 和 set,属性的首字母要大写
public class Person
{
}
public virtual int ID { get; set; }
public virtual int UserID { get; set; }
public virtual string UserName { get; set; }
public virtual DateTime BirtherDate { get; set; }
public virtual float Height { get; set; }
public virtual bool Sex { get; set; }
3)、【Mappings】下建立映射文件 Person.hbm.xml,注意 Person 是对应上面实体类的名称,
必须以.hbm.xml 为后缀名。我们可以参照 Nhibernate 包里面的实例 Tests 文件夹里面的
ABC.hbm.xml。如果想在编写时候有智能提示的,可以把【Required_Bins】目录下
的
[Nhibernate-configuration.xsd]和[nhibernate-mapping.xsd]两个文件拷贝到
VS 的安装目录/Microsoft Visual Studio 10.0/Xml/Schemas 下,就可以有智能提示了。
//name=类的全名,命名空间 table=表名
// name=属性名 cloumn=字段名称
注意,属性名必须跟实体类的属性名相同,注意大小写,字段名必须对应 Person 表的字段,
注意大小写。
在配置完这个文件以后,要注意关键的一步,把【Person.hbm.xml】文件的属性
复制到输出目录:始终复制
生成操作:嵌入的资源
在完成上面的操作之后把该项目生成以下。
2、在 DAL 项目中,引用需要的 dll 文件,包括以下
主要是:DomainModel(上一个项目生成的 dll 文件),Iesi.Collections,
Nhibernate,nunit.framework
在这里我们添加一个 NhibernateHelper.cs 类,这个类主要是辅助下面 PersonHQ.cs,获取
Isession.代码如下:
public class NHinbernateHelper
{
//
private ISessionFactory _sessionfacotry;
//构造函数,在new这个类的时候就调用GetSessionFactory这个方法获取到ISessionFactory
public NHinbernateHelper()
{
}
_sessionfacotry = GetSessionFactory();
private ISessionFactory GetSessionFactory()
{
}
Configuration cfg = new Configuration();
ISessionFactory sf =
cfg.Configure().BuildSessionFactory();
return sf;
//获得Isession
public ISession GetSession()
ISession session = _sessionfacotry.OpenSession();
return session;
{
}
}
然后再添加一个 PersonHQL.cs 类,实现增删改查,还有分页查询方法。
PersonHQL.cs 类的代码如下:
public class PersonHQL
{
private ISession _session;
public ISession Session
{
get
{
}
return _session;
}
//构造函数,在 new 这个类的时候,需要传一个 ISession 参数
public PersonHQL(ISession session)
{
_session = session;
}
//增加一条记录
///
/// 增加记录
///
///
Person 实体
///
int
public int CreatePerson(Person person)
{
int newid = (int)_session.Save(person);
_session.Flush();
return newid;
}
//删除一条记录
///
/// 删除记录
///
///
Person 实体
///
bool
public bool DeletePerson(Person person)
{
_session.Delete(person);
_session.Flush();
return true;
}
//更新一条记录
///
/// 更新记录
///
///
Person 实体
///
无返回值
public void UpdatePerson(Person person)
{
_session.Update(person);
_session.Flush();
}
//获取 Person 整张表的数据
///
/// 获取整张 Person 的记录
///
///
无参数
///
IList
public IList
GetList()
{
return _session.CreateQuery("from Person").List();
}
//把查询某一段的数据,pagesize 是第几条记录开始从 0 开始记起,pageindex 读取
多少条记录
///
Person person = _session.Get
(id);
_session.Close();
return person;
{
}
}
完成以上的步骤,然后生成以下改项目。
3、在 WebApp 项目中,添加 dll 文件
主要包括以上圈着的文件,在 Nhibernate 包里能找到。DAL 和 DomainMode 是上两个项目生成的
dll 文件。
1) 在这里我们需要配置一个文件
【Hibernate.cfg.xml】这个文件在 Nhibernate 包里面的【Configuration_Templates】目录,找