将.net项目从非托管ODP切换到托管ODP的问题.网络组件



我正试图将我的。net项目切换到管理oracle,以使部署更容易。然而,我在测试Win Server 2013环境中得到以下错误:

无法确定类型为'Oracle.ManagedDataAccess.Client.OracleConnection'的连接的提供者名称。

我已经走过的步骤:

  1. 删除所有Oracle。解决方案
  2. 中的DataAccess dll和引用
  3. 在NuGet包管理器
  4. 中增加了Oracle Data Provider for .NET (ODP.NET) Managed Driver
  5. 将所有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=_____;"
   />

任何帮助都将非常感激!

手动下载方法

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

在Visual Studio 2012中使用实体框架管理Oracle数据访问。NET 4.5):

  1. 下拉实体框架5.0.0.0

    Install-Package EntityFramework -Version 5.0.0

  2. 下载最新的Oracle Data Access Components (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程序集。我还没有在。net 4的VS2010上测试过这个

非官方NuGet方法

在Visual Studio 2012中使用实体框架管理Oracle数据访问。NET 4.5):

  1. 下拉实体框架5.0.0.0

    Install-Package EntityFramework -Version 5.0.0

  2. 下拉Oracle Data Provider for .NET (ODP.NET) Managed Driver

    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程序集。我还没有在。net 4的VS2010上测试过这个

最新更新