c# - ADO.NET 提供程序 'Oracle.ManagedDataAccess.Client' 未在机器或应用程序配置文件中注册,或者无法加载

标签 c# oracle configuration entity-framework-6 .net-4.5

我正在使用 .NET4.5.1MVC5EF6,以及 Oracle.ManagedDataAccess 4.121.1.0Oracle.ManagedDataAccess.EntityFramework 6.121.2.0

我能够从现有数据库生成模型(其中一部分是逐表添加),应用程序构建得很好。

但是当我尝试运行测试查询以查看它是否可以获取数据时

 public ActionResult Cancellations()
    {
        var factoryClasses = System.Data.Common.DbProviderFactories.GetFactoryClasses();
        using (var db = new Entities())
        {
            var cancelationStatuses = new[] {3, 7, 9};
           var result = db.TRANSACTIONDETAIL.Where(o => cancelationStatuses.Contains(o.TRANSACTIONSTATUSID));
           return View(result);
        }
    }

失败(在 var result = ... 上),无法找到请求的 .Net Framework 数据提供程序。可能没有安装。

When trying to look for DbProviderFactories 集合中确实没有任何内容 (var factoryClasses =)。

但是I do have installed 12c 4 (ODTwithODAC121024)和 11g(ODTwithODAC1120320_32bit),并重新启动机器。

数据库在 11g 上运行,我可以使用 PL/SQL developer 访问它 enter image description here

Web.config 如下所示:

<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 <section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
.....
<connectionStrings>
.....
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
 <add name="Entities" connectionString="metadata=res://*/OracleDb.csdl|res://*/OracleDb.ssdl|res://*/OracleDb.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='data source=******" providerName="System.Data.EntityClient" />           </connectionStrings>
......
<system.data>
<DbProviderFactories>
  <!-- Remove in case this is already defined in machine.config -->
  <add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>

我假设它失败了,因为 Oracle 没有在 DbProviderFactories 或其他地方注册

如何在 DbProviderFactories 中注册 Oracle?或者,如果不是这种情况,我的设置有什么问题?

最佳答案

我在更新 Visual Studio 2017 时遇到了这个错误。 可以通过为 VS 2017 重新安装 ODT 来解决该错误:

1) 关闭 Visual Studio。

2) 从控制面板卸载现有的 Oracle Developer Tools for Visual Studio 2017。

3) 从以下链接安装最新的 (ODTforVS2017_122011.exe):

http://www.oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2017-3806459.html

4) 打开 visual studio 并构建解决方案。现在应该不会生成错误。

关于c# - ADO.NET 提供程序 'Oracle.ManagedDataAccess.Client' 未在机器或应用程序配置文件中注册,或者无法加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271009/

相关文章:

ruby-on-rails - 如何从Rails on Rails应用程序内的设置更改elasticsearch max结果窗口?

oracle - 用户last_value填写日期

oracle - 如何检查 oracle 数据库是否与 REGEXP_LIKE 兼容?

sql - 按名称和日期范围对数据进行分组

url - Nginx可以基于URL运行Unix命令吗?

c# - DateTime.MaxValue 在 mysql 中保存为零

c# - 如何在 Metro 应用中调试共享合约?

c# - LINQ 和对象引用的问题

c# - 获取表达式树中方法参数的值

.net - SKU代表什么?