NHibernate以前没弄过,现在就来学习了,NHibernate 2.0对应的是vs 2008 ,NHibernate 1.2 对应的是vs 2005,由于本人还是用vs 2005,所以就选择了NHibernate 1.2。
我在网上找了下教程,看到园子里http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html这个不错,那是用vs 2008的。
网上资源太多了,随便仿照了一个。
建数据库脚本(sql server 2000),首先要手动新建个名字为NHibernate的数据库,然后在这个数据库里执行脚本就可以啦。
User.hbm.xml
脚本的作用是建个users表。
然后新建两个项目,一个类库,一个Winform。类库不需要添加引用,Winform要添加对NHibernate(可以到上面的那个链接上去下载)和刚建的类库的引用。
类库下User.cs

Code
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; }
}
}
}
和User相对应的映射文件代码User.hbm.xml

Code
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="ClassLibrary1.User,ClassLibrary1" table="users" lazy="false">
<id name="Id" column="LogonId" type="String" length="20">
<generator class="assigned" />
</id>
<property name="UserName" column="Name" type="String" length="40" />
<property name="Password" type="String" length="20"/>
<property name="EmailAddress" type="String" length="40"/>
<property name="LastLogon" type="DateTime"/>
</class>
</hibernate-mapping>
最后,再来看看Winform的代码
app.config

Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.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="Data Source=SAIXIN-560259DD;User ID=sa;Password=sa;persist security info=False;initial catalog=NHibernate;"/>
</nhibernate>
</configuration>
这样就完成了大部分工作,用时候就这样了。这是向数据库里添加一条新纪录。

Code
Configuration cfg = new Configuration();
cfg.AddAssembly("ClassLibrary1");
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User user = new User();
user.Id = System.Guid.NewGuid().ToString();
user.UserName = "lhking";
user.Password = "123";
user.EmailAddress = "liukuo.lk@163.com";
user.LastLogon = DateTime.Now;
session.Save(user);
transaction.Commit();
session.Close();
最后我运行时,出现了个Unknown entity class错误,搜了下,是要把那个User.hbm.xml中的生成操作,改成嵌入的资源,具体也不是很明白。
完整示例