NHibernate快速指南(一)

什么是NHibernate

NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于JavaHibernate 关系型持久化工具。

NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。

为什么写这个指南

任何熟悉Hibernate的人会发现这篇指南和Glen Smith A Hitchhiker's Guide to Hibernate非常相近。这里的内容正是基于他的指南,因此所有的感谢都应该给与他。

NHibernate的文档并非每处都和Hibernate的文档一致。然而,项目的相似应该能使读者通过读Hibernate的文档来很好的理解NHibernate如何工作。

这篇文档意在让你尽可能快的开始使用NHibernate。它将介绍如何持久化一个简单的对象到一张表里。想得到更多的复杂的例子,可以参考NUnit测试及附带代码。

开发的过程

Nhibernate未来将会提供一些工具帮助你自动产生schema文件(现在还是基于代码)或是通过映射文件产生类(在筹措阶段)或是更新schema(来自于一个新开发者的建议)。然而,这里我们的例子是假定一切来自于完全手写,包括设置表和.Net类的编写。我们将进行以下步骤。

1.新建一个将要持久化.Net对象的表

2.构建一个需要被持久化的.Net

3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件

4.构建一个让NHibernate知道如何连接数据库的配置文件]

5.使用NHibernateAPI

第一步:写构建表的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来持久化数据。

posted @ 2009-08-04 11:45  awp110  阅读(129)  评论(0编辑  收藏  举报