zoukankan      html  css  js  c++  java
  • NHibernate4使用Oracle.ManagedDataAccess.dll连接oracle及配置多个数据库连接

    NHibernate数据库配置参数在hibernate.cfg.xml中

    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
      <session-factory name="ora10gFactory">
        <!--<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>-->
        <!--property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property-->
        <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
        <property name="connection.driver_class">NHibernate.Driver.OracleManagedDataClientDriver</property>
        <property name="connection.connection_string">
          User ID=jg122;Password=jg122;Data Source=127.0.0.1:1521/orcl
        </property>
        <property name="show_sql">true</property>
        <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
        <!--<property name="current_session_context_class">managed_web</property>
        <property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory,NHibernate</property>-->
        <property name="hbm2ddl.keywords">none</property>
        <!--加载映射-->
        <mapping assembly="Spring.NHibernate.Model"/>
      </session-factory>
    </hibernate-configuration>

    其中dialect和driver值,可以从对象浏览器中查看NHibernate.dll的结构进行选择。

        

    oracle连接使用的是Oracle.ManagedDataAccess.dll,因此driver选择OracleManagedDataClientDriver,Dialect选择最新的Oracle10gDialect

    创建数据库实例类代码:

    public class NHibernateHelper
        {
            private static ISessionFactory _sessionFactory;
    
            /// <summary>
            /// 创建ISessionFactory
            /// </summary>
            public static ISessionFactory SessionFactory
            {
                get
                {
                    // 默认从 App.config,web.config或者hibernate.cfg.xml查找配置文件;
                    //var cfg = new Configuration().Configure("");
                    //// 如果配置文件不是以上“App.config,web.config或者hibernate.cfg.xml”,是自定义的配置文件名称;
                    //// 要注意使用MSTest进行单元测试时,请写配置文件的绝对路径,否则找不到;
                    ////var cfg = new NHibernate.Cfg.Configuration().Configure("D:/ProjectStudyTest/NHibernate/NHibernateStudy/Lesson3.Dao/Config/hibernate.cfg.xml");
    
                    ////如果用户Nunit进行单元测试,写相对路径即可。
                    ////var cfg = new NHibernate.Cfg.Configuration().Configure("Config/hibernate.cfg.xml");
    
                    //sessionFactory = cfg.BuildSessionFactory();
    
    
                    //配置ISessionFactory
                    var cfg = (new Configuration()).Configure();
                    return _sessionFactory == null ? cfg.BuildSessionFactory() : _sessionFactory;
                }
            }
        }

    系统默认会在部署根目录下从App.config,web.config或者hibernate.cfg.xml查找配置参数;

           如果要指定nhibernate数据库配置文件,可以使用Configure的重载方法,传入路径参数。

    方法一:创建多个cfg.xml配置文件,实现连接多个数据库

     1 public class NHibernateHelper
     2     {
     3         private static ISessionFactory _sessionFactory;
     4 
     5         /// <summary>
     6         /// 创建ISessionFactory
     7         /// </summary>
     8         public static ISessionFactory SessionFactory
     9         {
    10             get
    11             {
    12                 // 默认从 App.config,web.config或者hibernate.cfg.xml查找配置文件;
    13                 //var cfg = new Configuration().Configure("");
    14                 //// 如果配置文件不是以上“App.config,web.config或者hibernate.cfg.xml”,是自定义的配置文件名称;
    15                 //// 要注意使用MSTest进行单元测试时,请写配置文件的绝对路径,否则找不到;
    16                 ////var cfg = new NHibernate.Cfg.Configuration().Configure("D:/ProjectStudyTest/NHibernate/NHibernateStudy/Lesson3.Dao/Config/hibernate.cfg.xml");
    17 
    18                 ////如果用户Nunit进行单元测试,写相对路径即可。
    19                 ////var cfg = new NHibernate.Cfg.Configuration().Configure("Config/hibernate.cfg.xml");
    20 
    21                 //sessionFactory = cfg.BuildSessionFactory();
    22 
    23                 string path = AppDomain.CurrentDomain.BaseDirectory + "hibernate2.cfg.xml";
    24                 //配置ISessionFactory
    25                 var cfg = (new Configuration()).Configure(path);
    26                 return _sessionFactory == null ? cfg.BuildSessionFactory() : _sessionFactory;
    27             }
    28         }
    29     }

    方法二:在hibernate.cfg.xml中配置多个数据库连接参数

    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    
      <session-factory name="sqlite">
        <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
        <property name="connection.connection_string">
          Data Source=D:codeSummaryToolCSPlugininDebug	est.db;Version=3;New=False;
        </property>
        <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
        <property name="query.substitutions">true=1;false=0</property>
        <property name="show_sql">true</property>
        <property name="use_outer_join">true</property>
      </session-factory>
    
      <session-factory name="sqlserver">
       <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
          <property name="prepare_sql">false</property>
      
       <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
       <property name="connection.connection_string">
            Server=(local);initial catalog=***;Integrated Security=SSPI;User ID=***;Password=***
          </property>
       <property name="show_sql">true</property>
        
       <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
      </session-factory>
    
    </hibernate-configuration>

    创建数据库实例代码:

     1 public static ISession GetSession(string strkey)
     2 {
     3     if (!mdic_sessionFactory.ContainsKey(strkey))
     4     {
     5         lock (m_lockHelper)
     6         {
     7             if (!mdic_sessionFactory.ContainsKey(strkey))
     8             {
     9 
    10                 string path = AppDomain.CurrentDomain.BaseDirectory + "hibernate.cfg.xml";
    11                 //
    12                 Configuration m_configurationtmp = new Configuration();
    13                 XmlDocument xdoc = new XmlDocument();
    14                 xdoc.Load(path);
    15 
    16 
    17                 XmlNode xn = null;
    18                 foreach (XmlNode xnsub in xdoc.DocumentElement.ChildNodes)
    19                 {
    20 
    21                     if (xnsub.Attributes["name"].Value == strkey)
    22                     {
    23 
    24                         xn = xnsub;
    25                         break;
    26                     }
    27 
    28                 }
    29 
    30                 XmlTextReader xtr = new XmlTextReader(new StringReader(xn.OuterXml));
    31                 m_configurationtmp.Configure(xtr);
    32                 //m_configurationtmp.AddAssembly("ServiceCoreModel");
    33 
    34                 mdic_sessionFactory[strkey] = m_configurationtmp.BuildSessionFactory();
    35             }
    36         }
    37     }
    38     return mdic_sessionFactory[strkey].OpenSession();
    39 }
  • 相关阅读:
    每个Java开发人员都应该知道的4个Spring注解
    JVM中的动态语言支持简介
    深入探索Java设计模式(五)之构建器模式
    Java——MVC模式
    程序出了问题,报错只能参考
    查看电脑端口占用情况
    Java——参数传递
    Python——关于定义过程
    Java——super的使用
    关于如何查看论文是否被SCI或者EI收录
  • 原文地址:https://www.cnblogs.com/lauer0246/p/9642114.html
Copyright © 2011-2022 走看看