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:\code\SummaryTool\CSPlugin\bin\Debug\test.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 }

原文地址:https://www.cnblogs.com/lauer0246/p/9642114.html

时间: 2024-10-11 14:08:27

NHibernate4使用Oracle.ManagedDataAccess.dll连接oracle及配置多个数据库连接的相关文章

在Visual Studio 2017中,.NET(C#)通过Oracle.ManagedDataAccess来连接Oracle数据库

C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜索栏中输入oracle查找,选择名为Oracle.ManagedDataAccess的安装. 2.引入Oracle.ManagedDataAccess.Client空间 3.数据库的连接字符串: User ID:用户名 Password:用户密码 Data Source:请看下面的截图 OK,到此在

Oracle.ManagedDataAccess.dll

C#使用Oracle.ManagedDataAccess.dll 在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用进行了集成,就是下图中的这个,尽管现在使用这个的时候visual studio提醒过时的,但在那时却是非常好用的. 为什么现在visual studio中这个程序集依然能使用,有ODP.NET,单单要拿出Oracle.ManagedD

C#使用Oracle.ManagedDataAccess.dll

在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用进行了集成,就是下图中的这个,尽管现在使用这个的时候visual studio提醒过时的,但在那时却是非常好用的. 为什么现在visual studio中这个程序集依然能使用,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll进行本文的重点呢? 1.visual s

FSharp 调用 Oracle.ManagedDataAccess.dll

Oracle.ManagedDataAccess.dll 即使是 64 位系统,也要注册 32 位版本. #if INTERACTIVE #[email protected]"C:\oracle\odp.net\managed\common\Oracle.ManagedDataAccess.dll" #endif openOracle.ManagedDataAccess.Client openOracle.ManagedDataAccess.Types open System.Data

PowerShell 调用 Oracle.ManagedDataAccess.dll

 # # PowerShell调用 Oracle.ManagedDataAccess.dll # [System.Reflection.Assembly]::LoadFrom("C:\oracle\odp.net\managed\common\Oracle.ManagedDataAccess.dll") $connStr="userid=hr;password=hr;data source=xe" $conn=New-ObjectOracle.ManagedDa

C#用Oracle.DataAccess中连接Oracle要注意版本问题!转)

一般人,不包括全部平时在开发中使用的都是32位的PC机,所以安装的也是Oracle32位的客户端.但是一般服务器都是64位的,安装的也是 64位的Oracle客户端,如果要部署使用Oracle.DataAccess连接Oracle的应用程序时,可能会遇到版本上的问题.那具体来说表现在以下两个方面:主要版本问题有两种,一种是32位版和64位版的问题,如果我们开发出来的应用是32位的,那么就必须使用32位的客户端,如果是64位的应用程序当然对应64位的客户端.这里需要注意:在64位的环境中使用VS开

【Robotframework连接oracle】robot连接oracle数据库

1.下载databaselibrary 2.安装一个oracle的支持库:cx_Oracle windows下可以下载.exe来安装,这个库的下载地址是:https://pypi.python.org/pypi/cx_Oraclehttps://pypi.python.org/pypi/cx_Oracle 下载的库的位数要和Python位数一致,我这里下载的64位的,(cx_Oracle-5.1.2-py2.7.egg-info),cx_Oracle版本是11g,下载完成后直接安装 3.dll

oracle通过DBlink连接oracle

1.1赋权(将crh_snp用户赋权具体创建dblink权限) 在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户 grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to crh_snp; 1.2具体创建db_link 然后以crh_snp用户登录本地数据库,执行以下语名 create database linkdcrac2 conne

PL/SQL(x64)借助Oracle Instant Client连接Oracle配置教程

PL/SQL在Windows x64位操作系统下安装配置稍显复杂,为了方便Oracle库友使用这个便利的工具,先提供PL/SQL借助Oracle Instant Client(该文件比Oracle Client文件小很多,可为用户节省安装时间)连接数据库配置教程一份,有需要的盆友请拿走. 1.  下载Oracle Instanct Client(Oracle即时客户端) 登录Oracle官方网站,下载Oralce即时客户端.你能够看到不同系统的客户端,根据自己的需要选择对应的版本,下载完毕后,解