C# NHibernate 和 Oracle 托管客户端

C# NHibernate & Oracle Managed Client

我有一个大项目隐藏了另外 16 个项目(测试、网络和应用程序,如核心、电子邮件等。)。我将 C# MVC4 用于我的主要网站项目。如果我使用非托管客户端需要我做一个项目文件夹 /bin 记录库 Oracle.DataAccess.dll 并且一切正常(我必须在 Web.config 中设置(更改) -> 参数:

<connectionStrings>
   <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)));" />   
</connectionStrings>

数据库连接工作正常,没有 ORA 异常 TNS_NAME)。当我只使用像 TEST 这样的别名时,我必须使用 tnsnames.ora 将数据源设置为完整路径,我收到一条消息 "Exception: ORA-12154: TNS:could not resolve the connect identifier specified",但是如果我为别名设置完整的 tns 代码 -> 一切正常。

我使用hibernate.cfg.xml文件:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
   <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
      <property name="show_sql">true</property>
      <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
      <property name="command_timeout">60</property>
      <property name="cache.provider_class">NHibernate.Caches.SysCache2.SysCacheProvider, NHibernate.Caches.SysCache2</property>
      <property name="cache.use_second_level_cache">true</property>
      <property name="cache.use_query_cache">true</property>
      <property name="cache.default_expiration">120</property>
   </session-factory>  

我的 Web.config 文件(对于托管客户端添加 oracle.manageddataaccess.client 部分):

<connectionStrings>
   <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=DBTEST;" />   
</connectionStrings>

<oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="DBTEST" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)))"/>
      </dataSources>
    </version>
</oracle.manageddataaccess.client>

我有专用的数据库服务器,我在 Visual Studio 2010 SP1 32 位 (Win 7 64b) 上编程。我已经安装了 Oracle 客户端 11g(32 和 64b 版本)。文件 hibernate.cfg.xml 用于包中的另外 3 个项目,如 "IntegrationTest"、"Core" 等:。我 运行 使用调试模式和 x86 平台编程 (F5)。

在项目中我使用:


我需要安装什么包以及如何设置它? 我尝试使用 Nuget

添加引用

当我将其中一些包(从 Nuget 添加引用)安装到我的网站项目时,我将 hibernate.cfg.xml 更改为:

<property name="connection.driver_class">NHibernate.Driver.OracleManagedDriver</property>

我收到来自 VS 异常的消息 "Could not create the driver from NHibernate.Driver.OracleManagedDriver"


如果我转到 View -> Server Exploler -> Data Cennection 并设置 添加连接。 . .(参见 link -> .NET 入门手册)。我没有获得 ODP.NET 托管选项,只有 .NET Framework 数据提供程序用于 Oracle 选项,当我尝试连接时我收到此消息 "BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed"

我的问题是

  1. 我可以参考什么(驱动程序)?
  2. 如何设置?

An Easy Drive to .NET Manual

非常感谢

我正在使用 NHibernate 4.0.4 并且我已经安装了 "Oracle.ManagedDataAccess" nuget 包 (https://www.nuget.org/packages/Oracle.ManagedDataAccess/)。

为了将 NHibernate 配置为使用 Oracle Managed Driver,有必要稍微更改 hibernate.cfg.xml 文件 - 并将 NHibernate.Driver.OracleManagedDataClientDriver 用作 "connection.driver_class"。

因此,我的xml配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.OracleManagedDataClientDriver</property>
    <property name="connection.connection_string">User Id=user;Password=pws;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.18)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SRV)))</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
  </session-factory>
</hibernate-configuration>

祝你好运 - 我知道使用 Oracle 和 ORM 可能是一种非常烦人的体验,但最终值得付出努力。