Net - NHibernate之一 QuickStart
2006-09-11
NHibernate最新版本1.2.0,目前仍是Alpha测试版,该版本支持.Net Framework 2.0,加入了不少特性,例如对SQL Server 2005的支持等。
1. 相关资料下载
从http://sourceforge.net/project/showfiles.php?group_id=73818可以下载到最新版本的NHibernate。从http://www.nhibernate.org/网站,可以下载相关的文档。
2. 编译
我下载了之后,自己重新编译了一次。有几个需要注意的地方:a) 估计NHibernate开发时用的是SharpDevelop,所以用VS2005打开工程NHibernate.Everything-2.0.sln时会有一些提示信息。坚持用VS2005打开进行编译应当不会有什么问题,我是用SharpDevelop编译的。b) 我下载的版本,不改变任何配置,Rebuild Solution时有2个错误,都是Nullables.Tests-2.0中的NullableCharFixture.cs里面Assert.IsTrue(ParseToStringValue(?));导致,改成Assert.IsTrue(ParseToStringValue(C));可以编译通过(不知道是否是字符集的问题导致的原因,反正Test也不会用)。c) 修改项目的输出目录。把所有项目名称里面不带Test单词,除NHibernate.Tool.hbm2net.Console-2.0、NHibernate.Examples-2.0、NHibernate.Tool.hbm2net-2.0之外的项目输出路径,修改到某一个目录下,例如D:\NHibernate\bin20。
3. 测试表结构
在SQL Server 2000中创建一个用于NHibernate测试的数据库,建立表结构。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)
)
4. QuickStart.Domain项目
用VS2005建立QuickStart.Domain的Class Library。创建测试的Domain类如下:
using System;
namespace QuickStart.Domain
{
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; }
}
}
}
在QuickStart.Domain项目中添加一个User.hbm.xml文件,内容如下:
在文件的属性上面选择BuildAction为Embedded Resource。
在QuickStart.Domain项目中添加一个Resources File,选择User.hbm.xml文件并保存。
编译QuickStart.Domain项目。
从上面可以看到,声明Entity类时,不需要继承,不需要声明Attribute等额外的信息,只需要为需要Mapping的Entity嵌入一个xml配置文件就可以。Hibernate通过.Net的反射机制,在运行时获取Entity的Mapping信息。
5. QuickStart.AppTest项目
在Solution里面添加一个QuickStart.AppTest的Windows Application项目(用Web项目测试是一样的,基本没有差别)。
添加项目引用。选择NHibernate编译目录里面的NHibernate.dll文件就可以,其它依赖的dll文件会被自动拷贝过来。添加对QuickStart.Domain的项目引用。
设置配置文件。为QuickStart.AppTest添加一个Application Configuration File(app.config),设置如下:
name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
数据库连接字符串,请根据自己的情况进行设置。
在QuickStart.AppTest项目里面添加一个类HibernateHelper。
using System;
using NHibernate;
using NHibernate.Cfg;
namespace QuickStart.AppTest
{
public sealed class HibernateHelper
{
private static readonly ISessionFactory sessionFactory;
static HibernateHelper()
{
Configuration cfg = new Configuration();
cfg.AddAssembly("QuickStart.Domain");
sessionFactory = cfg.BuildSessionFactory();
}
public static ISession GetCurrentSession()
{
ISession result = null;
if (sessionFactory != null)
result = sessionFactory.OpenSession();
return result;
}
public static void CloseSession(ISession session)
{
if (session != null)
{
session.Close();
}
}
public static void CloseSessionFactory()
{
if (sessionFactory != null)
{
sessionFactory.Close();
}
}
}
}
在Form的代码中添加引用
using NHibernate;
using NHibernate.Cfg;
using QuickStart.Domain;
在Form中加个Button,Click事件中写如下的测试代码:
User user = new User();
user.Id = "RicCC";
user.UserName = "冰封王座";
user.Password = "123!@#";
user.EmailAddress = "cc@sina.com";
user.LastLogon = DateTime.Now;
ISession session = HibernateHelper.GetCurrentSession();
ITransaction trans = session.BeginTransaction();
session.Save(user);
trans.Commit();
HibernateHelper.CloseSession(session);
OK,现在可以运行了。
yudi500
发表于 >2006-09-11 14:08:04 [评论 35] [浏览
0]