天天看點

NHibernate基礎

配置

本人使用的LinFu動态代理,NHibernate的版本為v2.2,在工程中引用Iesi.Collections.dll、LinFu.DynamicProxy.dll、log4net.dll、NHibernate.ByteCode.LinFu.dll、NHibernate.dll五個dll,接下來配置web.config如下:

<?xml version="1.0"?> 

<configuration> 

    <configSections> 

        <section name="hibernate-configuration"  

type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> 

... 

    </configSections> 

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 

        <session-factory> 

            <property name="connection.provider">

NHibernate.Connection.DriverConnectionProvider</property> 

            <property name="dialect"> 

                NHibernate.Dialect.Oracle10gDialect 

            </property> 

            <property name="connection.driver_class"> 

                NHibernate.Driver.OracleClientDriver 

            <property name="connection.connection_string"> 

                Data Source=sid;User ID=username;Password=passwd; 

Persist Security Info=true;Unicode=True</property> 

            <property name="proxyfactory.factory_class"> 

NHibernate.ByteCode.LinFu.ProxyFactoryFactory, 

NHibernate.ByteCode.LinFu 

            <property name="show_sql">true</property> 

            <mapping assembly="GXSN.CMS.NH.Oracle"/> 

        </session-factory> 

    </hibernate-configuration> 

</configuration> 

其中,GXSN.CMS.NH.Oracle是映射XML所在工程的工程名。

基本用法

<a target="_blank" href="http://blog.51cto.com/attachment/201107/140855438.png"></a>

其中

NHibernateHelper&lt;T&gt;:NHibernate資料通路輔助泛型單件類,實作查詢與非查詢功能,完成依賴NHibernate庫,NHibernate庫内置接口到此結束,不對系統其它部分造污染,更好地做到整個系統對NHibernate庫依賴,而是依賴自定義的Oper&lt;T&gt;類和enumOperation枚舉,為系統以後在資料通路中的演化提供條件;

Oper&lt;T&gt;:原子操作描述泛型類,包括業務實體和操作類型,依賴enumOperation枚舉;

enumOperation:操作枚舉。

在引用NHibernate資料通路輔助類後,如在添加學生資訊中,寫好XML映射檔案(關于XML映射檔案參考幫助文檔),再隻需要如下代碼完成即完成:

GXSN.DataAccess.NH.Util.NHibernateHelper&lt;GXSN.CMS.Entity.ContentClassInfo&gt;.

Instance.NonQuery(GXSN.DataAccess.NH.Util.enumOperation.Save, studentInfo); 

P.S. 在使用過程中,需要治理好代碼的互相依賴關系,否則會為以期系統的演化帶來災難。還有就是NH是最終被翻譯為ado.net進行執行,個人感覺不一定比ado.net快,隻不過有的地方使用起來友善點,

\

本文轉自 彭金華  51CTO部落格,原文連結:http://blog.51cto.com/pengjh/613106