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配置文件,实现连接多个数据库

 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(); string path = AppDomain.CurrentDomain.BaseDirectory + "hibernate2.cfg.xml";
//配置ISessionFactory
var cfg = (new Configuration()).Configure(path);
return _sessionFactory == null ? cfg.BuildSessionFactory() : _sessionFactory;
}
}
}

方法二:在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>

创建数据库实例代码:

 public static ISession GetSession(string strkey)
{
if (!mdic_sessionFactory.ContainsKey(strkey))
{
lock (m_lockHelper)
{
if (!mdic_sessionFactory.ContainsKey(strkey))
{ string path = AppDomain.CurrentDomain.BaseDirectory + "hibernate.cfg.xml";
//
Configuration m_configurationtmp = new Configuration();
XmlDocument xdoc = new XmlDocument();
xdoc.Load(path); XmlNode xn = null;
foreach (XmlNode xnsub in xdoc.DocumentElement.ChildNodes)
{ if (xnsub.Attributes["name"].Value == strkey)
{ xn = xnsub;
break;
} } XmlTextReader xtr = new XmlTextReader(new StringReader(xn.OuterXml));
m_configurationtmp.Configure(xtr);
//m_configurationtmp.AddAssembly("ServiceCoreModel"); mdic_sessionFactory[strkey] = m_configurationtmp.BuildSessionFactory();
}
}
}
return mdic_sessionFactory[strkey].OpenSession();
}

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

  1. Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端

    最开始,连接Oracle 数据是需要安装客户端的,ado.net 后来由于微软未来不再支持 System.Data.OracleClient 这个 Data Provider 的研发,从 .NET 4 ...

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

    C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜 ...

  3. C#使用托管程序连接Oracle数据库(Oracle.ManagedDataAccess.dll)

    一.概述 Oracle Data Provider for  .NET, Managed Driver: Oracle官方的托管数据库访问组件,单DLL,Oracle.ManagedDataAcces ...

  4. C#连接Oracle数据库的方法(System.Data.OracleClient、Oracle.DataAccess.Client也叫ODP.net、Oracle.ManagedDataAccess.dll)

    官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...

  5. C#使用Oracle.ManagedDataAccess.dll

    在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用 ...

  6. Oracle.ManagedDataAccess.dll方式操作oracle数据库

    Oracle.ManagedDataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnectio ...

  7. Oracle.ManagedDataAccess.dll

    C#使用Oracle.ManagedDataAccess.dll System.Data.OracleClient程序集没有多大的不同,基本上拿以前使用System.Data.OracleClient ...

  8. 在开发框架中扩展微软企业库,支持使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库

    在前面随笔<在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容3 ...

  9. 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动

    由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...

随机推荐

  1. XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)--J.Cave

    给你一棵树,现在有m个专家,每个专家计划从$a_i$走到$b_i$, 经过的距离不超过$d_i$,现在让你找一个点,使得所有专家的路途都能经过这个点 令$S_i$表示满足第i个专家的所有点,先检查1可 ...

  2. img标签和 background 属性的使用分析

    在网页布局中引入图片,最常用的两个就是 img 标签和 background 属性了.但何时使用 img 标签,何时使用 backround 背景图像呢? <img> 标签定义 HTML ...

  3. 2019ccpc-HN省赛-A/C/F/I

    A.最大下降矩阵 时间限制: 1 Sec  内存限制: 512 MB提交: 508  解决: 107[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 我们称一个矩阵是下降矩阵,当且仅当, ...

  4. 简单测试 Kotlin native 性能

    准备 一直使用kotlin JVM平台开发服务器的应用,最近想试试看 Kotlin native的性能. 我使用的是 kotlin native 1.3.21,要使用他非常的简单,下载最新的 IDEA ...

  5. No X11 DISPLAY variable was set

    在命令行调用图形化界面时报错 “No X11 DISPLAY variable was set” 首先使用xclock命令查看是否能调出时钟,如果不行,使用如下命令: 打开xmanager – pas ...

  6. unity中遍历Transform的子物体

    1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...

  7. saltstack高效运维

    saltstack高效运维   salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会 ...

  8. git冲突解决的几种办法

    文章目录 git stash 栈 放弃本地修改 撤销分支 强行冲掉之前的分支 删除分支 git stash 栈 git stash git pull git stash pop 当pull出现冲突时 ...

  9. centos7初上手1-安装mysql数据库

    随着云服务器的普及,购入云服务器的门槛越来越低,对一个程序员来说,很多人会购买一款云服务器.以前买过两年windows服务器(没有什么实际用途,就是为了玩),最近有机会接触一下linux服务器,选择了 ...

  10. 有关Java字符集编码的问题

    在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的? A.每个中文字符占用2个字节,每个英文字符占用1个字节 B.假设数据库中 ...