最近研究NHibernate,找到这篇文章,A QuickStart Guide to NHibernate
原文讲解的很简单,以为事情也会很简单,于是乎跟着它step by step,结果却怎么也不出来!
于是我把NUnit和log4net的源代码一并都down了下来,加入解决方案,想逐行调试,看看究竟是错在哪里!恶梦从此开始......
对于这三个Open Source项目,虽早有耳闻(NUnit有在用),但却一直没有时间仔细研究它们的代码。这么莽撞地一头扎了进去,感觉自己像是进入了克诺萨斯迷宫——怎么都转不出来...
算了,重新开始!
0、创建数据库NHibernate和相应的表,如下:
CREATE DATABASE NHibernate
GO
USE NHibernate
CREATE TABLE Users(
LogonID varchar(20) NOT NULL default '0',
Name varchar(40) default NULL,
Password varchar(20) default NULL,
EmailAddress varchar(40) default NULL,
LastLogon datetime default NULL,
PRIMARY KEY (LogonID)
)
GO
1、接着,用VS2003新建了个空白解决方案,名为NHibernateDemo。添加一个ClassLibrary,取默认名字ClassLibrary1。添加如下内容的User.cs文件:
using System;
namespace ClassLibrary1
{
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; }
}
}
}
2、接着添加映射文件User.hbm.xml,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="ClassLibrary1.User, ClassLibrary1" table="users">
<id name="Id" column="LogonId" type="String(20)">
<generator class="assigned" />
</id>
<property name="UserName" column="Name" type="String(40)"/>
<property name="Password" type="String(20)"/>
<property name="EmailAddress" type="String(40)"/>
<property name="LastLogon" type="DateTime"/>
</class>
</hibernate-mapping>
在解决方案视图中右键单击这个文件,属性,设置它的“生成操作”为“内嵌资源”,这样它就会随类库一起被打包发布了。
3、对NHibernateDemo解决方案,添加一个ConsoleApplication,取默认名字ConsoleApplication1。在其Class1中的主函数内添加如下内容:
Configuration cfg = new Configuration();
cfg.AddAssembly("ClassLibrary1"); // ClassLibary1是类库项目生成的结果文件名
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User newUser = new User();
newUser.Id = "joe_cool";
newUser.UserName = "Joseph Cool";
newUser.Password = "abc123";
newUser.EmailAddress = "[email protected]";
newUser.LastLogon = DateTime.Now;
// Tell NHibernate that this object should be saved
session.Save(newUser);
// commit all of the changes to the DB and close the ISession
transaction.Commit();
session.Close();
并在文件开头添加一下几个名字空间:
using NHibernate; // for other NHibernate API
using NHibernate.Cfg; // for class Configuration
using ClassLibrary1; // for class User
当然,你得先为ConsoleApplication1项目添加如下引用:ClassLibrary1.dll, NHibernate.dll,才有可能编译通过。
4、接下来为ConsoleApplication1项目添加app.config文件,其内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<nhibernate>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Server=localhost;initial catalog=nhibernate;User ID=sa;Password=123abc;Min Pool Size=2"
/>
</nhibernate>
</configuration>
如果使用的VS2003,则编译后IDE会自动将这个文件命名为“项目名字+exe.config”,并复制到输出目录下。如果不是,请自己动手拷贝app.config到输出目录,并如上述般命名之。
6、编译。运行。查看数据库结果。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=68241