我正在尝试使用 Oracle 11g Express 和 .NET 4.0 框架开发 ASP.NET MVC 4.0 应用程序。我可以使用 ODP.NET 提供程序连接到数据库,还可以针对数据库生成 EDMX。我不能做的是使用实体框架查询底层数据库。使用 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
{}
}
请在我离开一切、留起胡须、去山里的某个地方生活之前帮助我。
SOLUTION: 由于我还没有看到任何提及解决方案的内容,所以我在这里为后代提及它。下面的安德烈询问了我的连接字符串格式,尽管我持怀疑态度,但我还是去看了看。这就是我所看到的:
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;
it should,事实上,读
provider=Oracle.DataAccess.Client;
否则,您将告诉 EF 使用 [provider.dll],这不是一个真实的东西。另请注意,connectionString 元素的providerName 属性似乎已被覆盖或忽略。
UPDATE 2:如果这仍然没有帮助,请查看 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>
If 存在,请将其注释掉并重试,否则,如果不存在,请将其放入并重试。