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
问题描述
我正在使用 .NET4.5.1
、MVC5
、EF6
,以及 Oracle.ManagedDataAccess 4.121.1.0
和Oracle.ManagedDataAccess.EntityFramework 6.121.2.0
我能够从现有数据库生成模型(其中一部分逐表添加),应用程序构建得很好.
但是当我尝试运行测试查询以查看它是否可以获取数据时
public ActionResult Cancellations(){var factoryClasses = System.Data.Common.DbProviderFactories.GetFactoryClasses();使用 (var db = new Entities()){var cancelationStatuses = new[] {3, 7, 9};var 结果 = db.TRANSACTIONDETAIL.Where(o => cancelationStatuses.Contains(o.TRANSACTIONSTATUSID));返回视图(结果);}}
失败(在 var result = ...
上),无法找到请求的 .Net Framework 数据提供程序.可能没有安装.
Web.config 如下所示:
<预><代码><配置><configSections><!-- 有关实体框架配置的详细信息,请访问 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>.....<连接字符串>.....<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>......<系统数据><DbProviderFactories><!-- 如果这已经在 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,版本=4.121.2.0,文化=中性,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/主题/dotnet/downloads/odacmsidownloadvs2017-3806459.html
4) 打开 Visual Studio 并构建解决方案.现在应该不会产生错误.
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?
I encountered this error when i updated Visual Studio 2017. The error can be resolved by reinstalling ODT for VS 2017:
1) Close Visual Studio.
2) Uninstall the existing Oracle Developer Tools for Visual Studio 2017 from control Panel.
3) Install the latest one (ODTforVS2017_122011.exe) from the following link:
http://www.oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2017-3806459.html
4) Open visual studio and build solution.The error should not generate now.
这篇关于ADO.NET 提供程序“Oracle.ManagedDataAccess.Client"未在计算机或应用程序配置文件中注册,或者无法加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!