針對大型系統,往往採用Oracle資料庫。這是因為在大資料量的情況下Oracle的優勢比較明顯,而且能夠部署到非Windows環境下,從而彌補.NET程式跨平台的缺點。但是使用NHibernate訪問Oracle和訪問SQL Server相比來說要略微複雜。
在使用NHibernate訪問Oracle的過程中,我們需要以下幾個步驟:
1.下載並安裝Oracle用戶端http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/winsoft.html
2.確保驅動程式集檔案(System.Data.OracleClient.dll或Oracle.DataAccess.dll)存在。
3.配置Spring.NET的Spring.Data.NHibernate.LocalSessionFactoryObject對象。
按照上面的步驟即可訪問Oracle資料庫。在Oracle10G和11G的環境下通過測試。 以下是Spring.Data.NHibernate.LocalSessionFactoryObject對象的配置方式。
Spring.Data.NHibernate.LocalSessionFactoryObject有兩種配置方式:一種是配置HibernateProperties屬性的每個entry節點,另一種是配置ConfigFilenames屬性來從外部匯入hibernate.cfg.xml檔案。
首先,配置HibernateProperties屬性的代碼為:
NHibernateSessionFactory
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>Domain</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.Oracle10gDialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.OracleClientDriver"/>
<entry key="use_outer_join" value="true"/>
<entry key="show_sql" value="true"/>
<entry key="hbm2ddl.auto" value="update"/>
<entry key="hibernate.current_session_context_class"
value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate21"/>
<entry key="proxyfactory.factory_class" value="NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
注意的是:connection.driver_class屬性配置為NHibernate.Driver.OracleClientDriver;dialect屬性配置為NHibernate.Dialect.Oracle10gDialect。
資料庫的provider配置為:
<db:provider id="DbProvider" provider="System.Data.OracleClient"
connectionString="User ID=system;Password=ld;Data Source=192.168.1.122/ORCL"/>
也可以設定provider屬性為:OracleClient-2.0。這樣配置是以微軟提供的System.Data.OracleClient作為驅動。如果要以甲骨文提供的Oracle.DataAccess.dll作為驅動,則在確保引用Oracle.DataAccess.dll程式集的情況下需用修改provider屬性為:OracleODP-2.0,修改connection.driver_class屬性為NHibernate.Driver.OracleDataClientDriver。
其次,配置ConfigFilenames屬性外部匯入hibernate.cfg.xml檔案的代碼如下:
NHibernateSessionFactory
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21">
<property name="DbProvider" ref="DbProvider"/>
<property name="ConfigFilenames">
<list>
<value>D:\Config\hibernate.cfg.xml</value>
</list>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
hibernate.cfg.xml的配置為:
hibernate-configuration
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="WebApp">
<!--<property name="connection.connection_string">
User ID=system;Password=ld;Data Source=192.168.1.122/ORCL
</property>-->
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="hbm2ddl.auto">update</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping assembly="Domain"/>
</session-factory>
</hibernate-configuration>
好了,以上就是我的兩種配置方式。
代碼下載