Spring.NET实用技巧2——NHibernate访问Oracle数据库

  针对大型系统,往往采用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.OracleClientDriverdialect属性配置为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>
复制代码

 

 

  好了,以上就是我的两种配置方式。

 

  代码下载

 

posted @   冬子哥  阅读(12965)  评论(18编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示