ODP.NET错误无法找到请求的.Net Framework数据提供程序

Cap*_*chi 11 c# asp.net asp.net-mvc odp.net oracle11g

我正在尝试使用Oracle 11g Express和.NET 4.0框架开发ASP.NET MVC 4.0应用程序.我可以使用ODP.NET提供程序连接到数据库,也可以针对数据库生成我的EDMX.我不能做的是使用实体框架查询底层数据库.使用生成的connectionString Visual Studio实例化我的DbContext时,出现以下错误:

无法找到请求的.Net Framework数据提供程序.它可能没有安装

但是,它安装是因为

  1. 我可以在GAC中看到dll.
  2. 它在machine.config中提到.
  3. 它由我的项目引用.
  4. 我实际上用它从数据库生成我的EDMX.
  5. 我已经确认我到处都引用了正确的版本(4.112.3.0)

我在Cassini本地运行代码,我的硬件是32位架构,所以我假设我只能使用32位DLL,所以这不是架构问题.

代码的具体位是这样的:

public class MyContext : ObjectContext, IUnitOfWork
{
    public MyContext() 
    : base(ConfigurationManager
          .ConnectionStrings["OracleEntities"]
          .ConnectionString)//Connectionstring is verified
    {}
}
Run Code Online (Sandbox Code Playgroud)

在我离开一切之前请帮助我,留胡子然后在某个地方住在山上.

解决方案:由于我没有看到任何提及解决方案,我会在这里为后代提及它.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
Run Code Online (Sandbox Code Playgroud)

现在,要特别注意这条线

provider=provider=Oracle.DataAccess.Client;
Run Code Online (Sandbox Code Playgroud)

事实上它应该阅读

provider=Oracle.DataAccess.Client;
Run Code Online (Sandbox Code Playgroud)

否则你告诉EF使用[provider.dll],这不是真的.另请注意,似乎已覆盖或忽略connectionString元素的providerName属性.

更新2:如果此STILL没有帮助,请查看machine.config.您应该看到以下部分:

<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

  <remove invariant="Oracle.DataAccess.Client" />

</DbProviderFactories>
Run Code Online (Sandbox Code Playgroud)

如果<remove invariant ="Oracle.DataAccess.Client"/>存在,请将其注释掉并重试,否则,如果不存在,请将其放入并重试.

Gre*_* Z. 7

对我们来说,它是32对64位进程.

服务器是64位.安装的ODP.NET(Oracle客户端)也是64位.我们的应用程序使用Target平台"Any CPU"和"Prefer 32-bit"标志SET编译:

http://grab.by/v5ki

正在运行32位进程.一旦用标记重新编译未检查,一切都开始工作.


And*_*rei 1

尝试这个连接字符串格式:

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;
Run Code Online (Sandbox Code Playgroud)

查看 Oracle 数据库的连接字符串示例http://www.connectionstrings.com/oracle