2

我正在尝试将我的 .NET 项目切换到管理 oracle 以使部署更容易。但是,我在测试 Win Server 2013 环境中遇到以下错误:

无法确定“Oracle.ManagedDataAccess.Client.OracleConnection”类型连接的提供程序名称。

到目前为止我采取的步骤:

  1. 从解决方案中删除了所有 Oracle.DataAccess dll 和引用
  2. 在 NuGet 包管理器中添加了适用于 .NET (ODP.NET) 托管驱动程序的 Oracle 数据提供程序
  3. 将所有Imports Oracle.DataAccess语句切换到Imports Oracle.ManagedDataAccess

我没有收到任何构建错误,并且该项目在本地运行良好。但是,当部署到测试环境时,我收到此错误。测试环境是 Windows Server 2012,并且安装了旧版 Oracle 11.2.0 客户端工具。

这是我的连接创建代码:

Public Sub New()
    MyBase.New(
        New OracleConnection(
            ConfigurationManager.ConnectionStrings("Entities").ConnectionString),
        True)
End Sub

这是我尝试过的 3 种不同样式的连接配置(都在本地工作,但在测试环境中产生相同的问题)

(为可见性而格式化)

  <add 
      name="Entities"
      connectionString="
          Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
          User Id=_____;
          Password=_____;"
      providerName="Oracle.ManagedDataAccess.Client" />

  <add 
      name="Entities"
      connectionString="
          Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
          User Id=_____;
          Password=_____;"
      providerName="Oracle.DataAccess.Client" />

  <add 
      name="Entities"
      connectionString="
          Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
          User Id=_____;
          Password=_____;"
   />

任何帮助将不胜感激!

4

2 回答 2

7

手动下载方式

感谢@Christian Shay 指出托管 ODAC 的 NuGet 版本不是由 Oracle 编写的

要在 Visual Studio 2012 (.NET 4.5) 中将托管 Oracle 数据访问与实体框架一起使用:

  1. 下拉实体框架 5.0.0.0

    Install-Package EntityFramework -Version 5.0.0

  2. 下载最新的Oracle 数据访问组件 (ODAC)

  3. 手动参考Oracle.ManagedDataAccess.dll

  4. 将此部分添加到配置文件中

  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver"
           invariant="Oracle.ManagedDataAccess.Client"
           description="Oracle Data Provider for .NET, Managed Driver"
           type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

然后照常进行。此时看来Entity Framework 6还不支持Oracle.ManagedDataAccess,所以需要运行版本5。

另请记住,如果您使用的是 Visual Studio 2010 或更早版本,面向 .NET 4,NuGet 将下拉 EF5,但使用 4.x 程序集。我没有在 VS2010 上用 .NET 4 测试过这个。

于 2014-03-14T20:22:12.800 回答
5

非官方 NuGet 方法

要在 Visual Studio 2012 (.NET 4.5) 中将托管 Oracle 数据访问与实体框架一起使用:

  1. 下拉实体框架 5.0.0.0

    Install-Package EntityFramework -Version 5.0.0

  2. 下拉Oracle Data Provider for .NET (ODP.NET) 托管驱动程序

    Install-Package odp.net.managed

  3. 将此部分添加到配置文件中

  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver"
           invariant="Oracle.ManagedDataAccess.Client"
           description="Oracle Data Provider for .NET, Managed Driver"
           type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

然后照常进行。此时看来Entity Framework 6还不支持Oracle.ManagedDataAccess,所以需要运行版本5。

另请记住,如果您使用的是 Visual Studio 2010 或更早版本,面向 .NET 4,NuGet 将下拉 EF5,但使用 4.x 程序集。我没有在 VS2010 上用 .NET 4 测试过这个。

于 2014-03-14T14:47:09.657 回答