ODP.NET错误无法找到请求的.Net Framework数据提供程序
我正在尝试使用Oracle 11g Express和.NET 4.0框架开发ASP.NET MVC 4.0应用程序。 我可以使用ODP.NET提供程序连接到数据库,也可以针对数据库生成我的EDMX。 我不能做的是使用entity framework查询底层数据库。 使用生成的connectionString Visual Studio实例化我的DbContext时,出现以下错误:
无法找到请求的.Net Framework数据提供程序。 它可能没有安装
但是,它安装是因为
- 我可以在GAC中看到dll。
- 它在machine.config中提到。
- 它由我的项目引用。
- 我实际上用它来从数据库生成我的EDMX。
- 我已经确认我到处都引用了正确的版本(4.112.3.0)
我在Cassini本地运行代码,我的硬件是32位架构,所以我假设我只能使用32位DLL,所以这不是架构问题。
代码的具体位是这样的:
public class MyContext : ObjectContext, IUnitOfWork { public MyContext() : base(ConfigurationManager .ConnectionStrings["OracleEntities"] .ConnectionString)//Connectionstring is verified {} }
在我离开一切之前请帮助我,留胡子然后在某个地方住在山上。
解决方案 :由于我没有看到任何提及解决方案,我会在这里为后代提及它。 Andrei下面询问了我的连接字符串格式,虽然我很狡猾,但我去看看了。 这就是我所看到的:
metadata=res://*/OracleModel.csdl|res://*/ OracleModel.ssdl|res://*/ OracleModel.msl; provider=provider=Oracle.DataAccess.Client; provider connection string="DATA SOURCE=localhost:1521; PASSWORD=xxx;PERSIST SECURITY INFO=True;USER ID=xxx
现在,要特别注意这条线
provider=provider=Oracle.DataAccess.Client;
事实上,它应该阅读
provider=Oracle.DataAccess.Client;
否则你告诉EF使用[provider.dll],这不是真的。 另请注意,似乎已覆盖或忽略connectionString元素的providerName属性。
更新2 :如果此STILL没有帮助,请查看machine.config。 您应该看到以下部分:
如果存在,请将其注释掉并重试,否则,如果不存在,请将其放入并重试。
尝试此连接字符串格式:
Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;
查看Oracle db http://www.connectionstrings.com/oracle的连接字符串示例
对我们来说,它是32对64位进程。
服务器是64位。 安装的ODP.NET(Oracle客户端)也是64位。 我们的应用程序使用Target平台“Any CPU”和“Prefer 32-bit”标志SET编译:
正在运行32位进程。 一旦用标记重新编译未检查,一切都开始工作。
通过IIS,64位Win7打开页面时出现同样的错误。
我的解决方案是:
转到IIS管理器 – >应用程序池 – >高级设置 – >启用32位应用程序。
此错误有点误导,因为它也可能是由错误的CPU上下文运行引起的。 如果使用32位Oracle驱动程序,请确保允许32位。 这可以在IIS下进行设置,也可以将应用程序设置为IIS Express应用程序。
我有类似的问题。 通过添加NuGet包解决了这个问题。 我已经在ODT安装的引用中提供了Oracle.ManagedDataAccess.EntityFramework,但它在详细日志中给出了entity framework5与6的冲突。 一旦我添加了NuGet包,一切都开始工作了。
- 要安装,请右键单击引用 – >管理NuGet包… – >在浏览选项卡中搜索Oracle – >选择Oracle.ManagedDataAccess.EntityFramework并安装最新版本。
另一个可能的解决方案。
我的webapp在我的测试服务器上运行良好但是当我开始为我的实时服务器开发时,我得到了同样的错误:无法找到所请求的.Net Framework数据提供程序。 它可能没有安装
如果比较下面的两个连接字符串,您会注意到导致我的问题的字符串在提供程序名称中有“Managed”字样。 我实际上正在使用Oracle提供程序的非托管版本。 因此,我在我的实时服务器上收到错误,而不是在我的测试服务器上。
**ORIGINAL:** connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.ManagedDataAccess.Client" **NEW:** connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.DataAccess.Client"
这对我有用。 我的服务器已经安装了Oracle客户端。 (版本11.2.0)
-
从ODAC for Windows下载页面下载 ODP.NET托管驱动程序
(我选择了2015年10月发布,2.43 MB下载) -
解压缩zip文件,获取\ lib \ net40 \ Oracle.ManagedDataAccess.dll,并将其放在bin文件夹中。
-
在web.config中,在本答案中解释的system.data \ DbProviderFactories下添加对ODP.NET托管驱动程序的引用。
而已。
要确认,请运行此答案的代码以查看是否已安装ODP.NET提供程序。 您应该在列表中看到ODP.NET,托管驱动程序。
我实际下载了ODAC并安装它。 然后我添加一个参考,发现提到的包roadrunner71。