ODP.NET托管 – 无法找到请求的.Net Framework数据提供程序

使用Visual Studio 2013,我使用Nuget将最新版本的ODP.NET Managed添加到项目中:

Install-Package odp.net.managed 

http://www.nuget.org/packages/odp.net.managed/121.1.2

现在,当我尝试运行以下代码时:

 Database db = DatabaseFactory.CreateDatabase(); 

它抛出以下exception:

 An exception of type 'System.ArgumentException' occurred in System.Data.dll but was not handled in user code Additional information: Unable to find the requested .Net Framework Data Provider. It may not be installed. 

在阅读其他用户的类似问题后,我将托管驱动程序部分添加到C:\ Windows \ Microsoft.Net \ Framework64 \ v4.0.30319 \ Config \ machine.config:

      

但这没有任何影响。

我在web.config中指定了连接字符串,但是我不确定它是否在查看连接字符串格式,因为它在打开连接之前失败了:

    

我在Web配置中添加了以下内容:

       

我会先做一个直接测试并避免工厂方法:

 var conn = new Oracle.ManagedDataAccess.Client.OracleConnection("your connection string"); conn.Open(); 

此处的任何问题都与bin目录中缺少的Oracle.ManagedDataAccess.dll或连接字符串引起的连接问题有关(假设您已经可以通过其他方式连接到oracle实例)。

至于工厂,看起来你正在使用一些过时的企业库代码。 在框架的更高版本中,我相信你会使用:

 var factory = DbProviderFactories.GetFactory("ODP.NET, Managed Driver"); var conn = factory.CreateConnection(); 

我想如果你一步一步,你会得到更好的反馈。

在使用EntityFramework 5将ASP.NET MVC 5应用程序部署到安装了64位版本的ODAC客户端组件的64位服务器时,我遇到了此错误。

我按照b_levitt的建议并确认可以在不使用工厂的情况下手动打开连接,因此ODAC已安装并正常工作,但工厂方法无法找到组件。

在我的头发拉了一段未公开的时间之后,我发现问题在于32位版本的.NET框架的machine.config文件。 它没有包含oracle提供程序的条目,因此我手动将以下条目添加到此文件中:

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中

   

确保您有以下两个部分:

 

您可以从framework64文件夹下的machine.config文件中获取确切的条目。

接下来,在

    

确保您拥有以下两个工厂名称:

    

添加这些条目后,一切都在为我工作。

我解决了将我的Enable 32-bit ApplicationIIS应用程序池配置更改为FALSE

我收到exceptionFailed to find or load the registered .Net Framework Data Provider因为我安装的ODAC是64-bit ,而我的应用程序池正在使应用程序以32-bit运行。