下载 NHibernate-2.1.2.GA-bin ,这个自己上网找
引用以下的dll
LinFu.DynamicProxy.dll
NHibernate.ByteCode.LinFu.dll
Iesi.Collections.dll
log4net.dll
NHibernate.dll
Antlr3.Runtime.dll
1 : 数据库的表
CREATE TABLE [dbo].[users](
[LogonID] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT ('0'),
[Name] [nvarchar](40) COLLATE Chinese_PRC_CI_AS NULL DEFAULT (NULL),
[Password] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL DEFAULT (NULL),
[EmailAddress] [nvarchar](40) COLLATE Chinese_PRC_CI_AS NULL DEFAULT (NULL),
[LastLogon] [datetime] NULL DEFAULT (NULL),
PRIMARY KEY CLUSTERED
(
[LogonID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
2 : NHibernate.Examples.QuickStart项目全称 { 这里一定要注意每个字段要加上virtual}
namespace NHibernate.Examples.QuickStart
{
class User
{
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;
public User()
{
}
public virtual string Id
{
get { return id; }
set { id = value; }
}
public virtual string UserName
{
get { return userName; }
set { userName = value; }
}
public virtual string Password
{
get { return password; }
set { password = value; }
}
public virtual string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
public virtual DateTime LastLogon
{
get { return lastLogon; }
set { lastLogon = value; }
}
}
}
3 建立 *.hbm.xml文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NHibernate.Examples.QuickStart.User, NHibernate.Examples.QuickStart" table="users"> <!--格式的内容是这样的 class name = "namespace+classname,namespace",table="数据库中表明"-->
<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>
4 : 编写自己的hibernate.cfg.xml { 这里不要用 <nhibernate>我用这个一直编不过,网上很多 把 <property name="connection.provider"> 写成了 <property name="hibernate.connection.provider"> .我发现这样在编译时会一直提示 name 什么无效,不符合什么 string枚举之类的} 确保app.config 或 web.config 没有此配置。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!--<nhibernate>-->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping assembly="NHibernate.Examples.QuickStart"></mapping>
</session-factory>
<!--</nhibernate>-->
</hibernate-configuration>
后话 : 系统在提前第四步的这段配置信息时,会检验 *.hbm.xml 跟第二步写的实体类。如果两个有错或不匹配的话,也会报错。
在做第四步配置是name的值可以参考下载文件中的 nhibernate-configuration.xsd 和nhibernate-mapping.xsd , 编译时会 一直提示 name 什么无效 就是值跟*.xsd里面的里面的不配对
加个第五步
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().Configure();
//cfg.AddAssembly("NHibernate.Examples.QuickStart");
return cfg;
有些文章写这里还要加 //cfg.AddAssembly("NHibernate.Examples.QuickStart");.如果配置文件已经加了,这个是不用的
这样返回就可以用了