NHibernate学习

1、首先要准备几个dll文件 NHibernate.dll,Iesi.Collections.dll,Antlr3.Runtime.dll

2、NHibernate 有3中框架

分别为:Castle框架、LinFu框架、Spring.Net框架。
我们只要选择一种,在配置文件中配置proxyfactory.factory_class节点。

如果使用Castle.DynamicProxy2动态代理,引用NHibernate.ByteCode.Castle.dll程序集并配置proxyfactory.factory_class节点为
<property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property>

如果使用LinFu.DynamicProxy动态代理,引用NHibernate.ByteCode.LinFu.dll程序集并配置
proxyfactory.factory_class节点为<property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu</property>

如果使用Spring.Aop动态代理,引用NHibernate.ByteCode.Spring.dll程序集并配置
proxyfactory.factory_class节点为<property name="proxyfactory.factory_class"> NHibernate.ByteCode.Spring.ProxyFactoryFactory,NHibernate.ByteCode.Spring</property>

2、NHibernate程序组成
a) 建好数据表 叫做要持久化的表

b) 建一个类,设置好与上面实体表对应的所有属性,叫做被持久化的类

c) 再建一个xml映射文件,其实就是配置的作用,就是告诉NHIbernate,我需要哪个类和哪个表做相互映射做数据交流,而且取名为**.bhm.xml,对应实体表对应的被持久化类(上面的),放在上面所在的类库目录下,这样Nhibernate会自己去找到

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernateSample.Domain"
namespace="NHibernateSample.Domain.Entities">

<class name ="Customer">
<id name="Id" column ="CustomerId">
<generator class ="native"/>
</id>
<property name ="FirstName"/>
<property name ="LastName"/>
</class>
</hibernate-mapping>

说明: <class name ="Customer"> 数据库中的表名
<id name="Id" column ="CustomerId">
<generator class ="native"/>
</id>
name="Id" 表示上面持久化类中定义的属性
column ="CustomerId" 表示数据库中的字段为"CustomerId"
<generator class ="native"/> native表示为主键

注意:XML文件的默认生成操作为“内容”,这里需要修改为“嵌入的资源”生成,因为NHibernate是通过查找程序集中的资源文件映射实体

d)再建一个NHibernate与数据库连接的配置文件,nhibernate.cfg.xml,告诉NHibernate连哪个数据库,其中包括设置一些参数
<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- properties -->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="default_schema">dbo</property>
<property name="connection.connection_string">Server=.;initial catalog=test;user id=sa;password=mm#it-116</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="use_outer_join">true</property>
<property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property>
<!-- mapping files -->
<mapping assembly="ClassLibrary1" />
</session-factory>
</hibernate-configuration>
e) 建一个建立返回Nhibernate实例的类NHibernateHelper
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}

f) 需要从ISessionFactory中获取一个ISession(NHibernate的工作单元)。ISessionFactory可以创建并打开新的Session,调用这些类和方法

原文地址:https://www.cnblogs.com/JohnnyBao/p/4441684.html