针对大型系统,往往采用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属性的代码为:
<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配置为:
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文件的代码如下:
<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的配置为:
<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>
好了,以上就是我的两种配置方式。