ADO.NET提供程序“Oracle.ManagedDataAccess.Client”未在计算机或应用程序配置文件中注册,或无法加载 [英] The ADO.NET provider 'Oracle.ManagedDataAccess.Client' is either not registered in the machine or application config file, or could not be loaded

查看:3474
本文介绍了ADO.NET提供程序“Oracle.ManagedDataAccess.Client”未在计算机或应用程序配置文件中注册,或无法加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 .NET4.5.1 MVC5 EF6 Oracle.ManagedDataAccess 4.121.1.0
Oracle.ManagedDataAccess.EntityFramework 6.121.2.0



我可以从现有数据库(其中一部分按表格添加)生成模型,应用程序构建很好。



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

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

它失败(在$ code> var结果= ... )与无法找到请求的.Net框架数据提供程序。可能未安装。





Web.config看起来如下:

 <结构> 
< configSections>
<! - 有关实体框架配置的更多信息,请访问http://go.microsoft.com/fwlink/?LinkID=237468 - >
< section name =entityFrameworktype =System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089requirePermission =false/> ;
< section name =Oracle.ManagedDataAccess.Clienttype =OracleInternal.Common.ODPMSectionHandler,Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/>
< / configSections>
.....
< connectionStrings>
.....
< add name =OracleDbContextproviderName =Oracle.ManagedDataAccess.ClientconnectionString =User Id = oracle_user; Password = oracle_user_password; Data Source = oracle/>
< add name =EntitiesconnectionString =metadata = res://*/OracleDb.csdl | res://*/OracleDb.ssdl | res://*/OracleDb.msl; provider = Oracle .ManagedDataAccess.Client; provider connection string ='data source = ******providerName =System.Data.EntityClient/> < /&的ConnectionStrings GT;
......
< system.data>
< DbProviderFactories>
<! - 删除,以防在machine.config中已经定义了 - >
< add name =用于.NET的Oracle数据提供者invariant =Oracle.ManagedDataAccess.Clientdescription =Oracle Data Provider for .NETtype =Oracle.ManagedDataAccess.Client.OracleClientFactory,Oracle.ManagedDataAccess ,Version = 4.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/>
< remove invariant =Oracle.ManagedDataAccess.Client/>
< add name =ODP.NET,托管驱动程序invariant =Oracle.ManagedDataAccess.Clientdescription =Oracle数据提供者for .NET,托管驱动程序type =Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/>
< / DbProviderFactories>





















我的假设是失败,因为Oracle没有在中注册DbProviderFactories 或某处



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

解决方案

>

在我的 machine.config 中已经有

 < add name =用于.NET的Oracle数据提供者invariant =Oracle.ManagedDataAccess.Clientdescription =Oracle Data Provider for .NETtype =Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess,Version = 4.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/> 

然后在我的 web.config 这将无声给出任何提供者。所以在取出后:

 < add name =Oracle Data Provider for .NETinvariant =Oracle.ManagedDataAccess.Client description =Oracle Data Provider for .NETtype =Oracle.ManagedDataAccess.Client.OracleClientFactory,Oracle.ManagedDataAccess,Version = 4.121.1.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/> 
< remove invariant =Oracle.ManagedDataAccess.Client/>
< add name =ODP.NET,托管驱动程序invariant =Oracle.ManagedDataAccess.Clientdescription =Oracle数据提供者for .NET,托管驱动程序type =Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342/>

我已经运行了。


I am using .NET4.5.1, MVC5, EF6, with Oracle.ManagedDataAccess 4.121.1.0 and Oracle.ManagedDataAccess.EntityFramework 6.121.2.0

I was able to generate Model from existing database (part of it adding table by table), application builds just fine.

However when I try run test query to see if it can get the data

 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);
        }
    }

it fails (on var result = ...) with Unable to find the requested .Net Framework Data Provider. It may not be installed.

When trying to look for DbProviderFactories indeed there is nothing in collection (var factoryClasses =).

However I do have installed 12c 4 (ODTwithODAC121024) and 11g (ODTwithODAC1120320_32bit), and have restarted machine.

Database is running on 11g and I can access it with PL/SQL developer

Web.config looks following:

<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>

My assumption it's failing because Oracle is not being registered in DbProviderFactories or somewhere

How do I register Oracle in DbProviderFactories? Or if this is not the case what is wrong with my setup?

解决方案

Figured it out.

In my machine.config there was already

<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" />

and then it was repeated in my web.config which would silently fail to give out any providers. So after taking out:

  <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" />

I got it running.

这篇关于ADO.NET提供程序“Oracle.ManagedDataAccess.Client”未在计算机或应用程序配置文件中注册,或无法加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆