什么是 NHibernate
NHibernate 是一个基于. Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于 Java 的 Hibernate 关系型持久化工具。
NHibernate 从数据库底层来持久化你的. Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写 SQL 去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生 SQL 语句,并确保对象提交到正确的表和字段中去。
为什么写这个指南
任何熟悉 Hibernate 的人会发现这篇指南和 Glen Smith 的非常相近。这里的内容正是基于他的指南,因此所有的感谢都应该给与他。
NHibernate 的文档并非每处都和 Hibernate 的文档一致。然而,项目的相似应该能使读者通过读 Hibernate 的文档来很好的理解 NHibernate 如何工作。
这篇文档意在让你尽可能快的开始使用 NHibernate。它将介绍如何持久化一个简单的对象到一张表里。想得到更多的复杂的例子,可以参考 NUnit 测试及附带代码。
开发的过程
Nhibernate 未来将会提供一些工具帮助你自动产生 schema 文件(现在还是基于代码)或是通过映射文件产生类(在筹措阶段)或是更新 schema(来自于一个新开发者的建议)。然而,这里我们的例子是假定一切来自于完全手写,包括设置表和. Net 类的编写。我们将进行以下步骤。
1.新建一个将要持久化. Net 对象的表
2.构建一个需要被持久化的. Net 类
3.构建一个可以让 NHibernate 知道如何持久化对象属性的映射文件
4.构建一个让 NHibernate 知道如何连接数据库的配置文件]
5.使用 NHibernate 的 API
第一步:写构建表的 SQL
这里我们将使用的是一个非常简单的例子。假设你正在为你的网站开发一个基本的用户管理子系统。我们将使用如下的一张 User 表(假定你已经设置好一个数据库—在的例子里我称它为 NHibernate)。
- use NHibernate
- go
- CREATE TABLE users(
- LogonID nvarchar(20) NOT NULL
- default '0',
- Name nvarchar(40)
- default NULL,
- Password nvarchar(20)
- default NULL,
- EmailAddress nvarchar(40)
- default NULL,
- LastLogon datetime
- default NULL,
- PRIMARY KEY(LogonID)
- )
- go
我使用的是 MS Sql Server 2000, 但也可以使用任何数据库,只要你有关于它们的基于. Net 数据提供驱动程序。我们将得到一个含有 LogonID,Name, Password, Email 和 LastLogon 的表. 经过以上标准步骤,我们下一步是写一个. Net 类处理一个给定的 User 对象。
第二步: 产生一个. Net 类文件
当内存中有一堆 User 对象的时候,我们需要某种对象去保存它们。NHibernate 通过对象属性的反射来工作,因此我们需要添加我们希望持久化的对象属性。一个可以被 NHibernate 持久化的类应该看起来象下面的样子:
- using System;
- namespace NHibernate.Demo.QuickStart
- {
- public class User
- {
- private string id;
- private string userName;
- private string password;
- private string emailAddress;
- private DateTime lastLogon;
- public User()
- {
- }
- public string 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;
- }
- }
- }
- }
在上面的例子里,我们的属性和构建函数是 public,但这个对 NHibernate 不是必要的. 它可以使用 public, protected, internal 或者甚至是用 private 来持久化数据。
第三步:写映射文件
现在我们有数据表和需要去映射它的. Net 类。我们需要一种方式去让 NHibernate 知道如何从一个映射到另一个。这个任务依赖于映射文件来完成。最易于管理的办法是为每一个类写一个映射文件,如果你命名它是 YourObject.hbm.xml 并且把它放在和类的同一个目录里,NHiberante 将会使得事情简单起来。下面是一个 User.hbm.xml 的例子:
来源: http://lib.csdn.net/article/dotnet/39117