zoukankan      html  css  js  c++  java
  • 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>

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

      代码下载

  • 相关阅读:
    今天晚上有个什么样的博文呢
    STM8CubeMx来了
    开博啦
    Authentication
    文件上传设计要点
    分布式杂记
    SQL Server 知识集
    C# 集合使用误区
    网络知识集
    关于 elasticsearch 近实时特征的思考
  • 原文地址:https://www.cnblogs.com/GoodHelper/p/SpringNet_NHibernate_Config.html
Copyright © 2011-2022 走看看