【发布时间】:2013-07-05 21:08:13
【问题描述】:
我正在尝试使用 Oracle 11g Express 和 .NET 4.0 框架开发一个 ASP.NET MVC 4.0 应用程序。我可以使用 ODP.NET 提供程序连接到数据库,还可以针对数据库生成我的 EDMX。我不能做的是使用实体框架查询底层数据库。使用 Visual Studio 生成的 connectionString 实例化我的 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:如果这仍然没有帮助,请查看 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>
如果
【问题讨论】:
-
是的。您的回答为我指明了正确的方向,因此,我会将其标记为答案并投票。
-
谢谢 :)。祝你好运
-
哈哈。我又遇到了同样的错误,我在谷歌上搜索答案让我回到了我自己的问题。
-
总是有一个很好的做法是重新安装 oracle 客户端,以使其做出最佳配置,而不仅仅是编辑一些随机文件,看看它是否有效!
-
ODP.NET 安装程序已损坏。
标签: c# asp.net asp.net-mvc oracle11g odp.net