今天看了下NHibernate的示例程序(版本2.1.0Beta2),按照帮助文档的步骤示例程序无法执行。稍加修改后才可以运行,具体原因总结如下:

  • 增加配置项

<session-factory>

              <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

              <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

              <property name="connection.connection_string">Server=(local);initial catalog=quickstart;Integrated Security=SSPI</property>

              <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>

              <mapping assembly="QuickStart"/>

</session-factory>

 

注:黄色部分需要添加

如果没有添加,可能出现错误:"The ProxyFactoryFactory was not configured."

  • 拷贝相关联DLL到bin目录

NHibernate.ByteCode.Castle.dll

Castle.Core.dll

Castle.DynamicProxy2.dll

如果缺失相关程序集DLL,可能出现错误:"NHibernate.ByteCode.Castle.ProxyFactory”的类型初始值设定项引发异常"

  • 在Visual Studio中右击Cat.hbm.xml文件,设置属性:

编译动作(Build Action)->嵌入资源(Embedded Resource)

如果没有设置,可能出现的错误:No persister for QuickStart.Cat...

  • 注意每次数据库操作,都需使用事务来操作

ITransaction tx = session.BeginTransaction();

....

....

tx.Commit();
如果没有使用事务,类实例持久化操作不会写入数据库

 

 补充NHibernate的使用步骤:

1. 在app.config或web.config文件中增加NHibernate配置信息:configSection和hibernate-configuration节

2. 添加对NHibernate.dll程序集的引用

3. 编写持久化类,将需要持久化的属性设置为virtual

4. 编写Class.hbm.xml映射关系文件

5. 使用ISession和ISessionFactory接口进行持久化操作