我正在尝试使用Oracle 11g Express和.NET 4.0框架开发ASP.NET MVC 4.0应用程序.我可以使用ODP.NET提供程序连接到数据库,也可以针对数据库生成我的EDMX.我不能做的是使用实体框架查询底层数据库.使用生成的connectionString Visual Studio实例化我的DbContext时,出现以下错误:
无法找到请求的.Net Framework数据提供程序.它可能没有安装
但是,它安装是因为
我在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" /> …Run Code Online (Sandbox Code Playgroud) 我正在使用.NET4.5.1,MVC5和EF6,Oracle.ManagedDataAccess 4.121.1.0和
Oracle.ManagedDataAccess.EntityFramework 6.121.2.0
我能够从现有数据库生成模型(部分按表添加表),应用程序构建就好了.
但是当我尝试运行测试查询以查看它是否可以获取数据时
public ActionResult Cancellations()
{
var factoryClasses = System.Data.Common.DbProviderFactories.GetFactoryClasses();
using (var db = new Entities())
{
var cancelationStatuses = new[] {3, 7, 9};
var result = db.TRANSACTIONDETAIL.Where(o => cancelationStatuses.Contains(o.TRANSACTIONSTATUSID));
return View(result);
}
}
Run Code Online (Sandbox Code Playgroud)
它失败了(上var result = ...)Unable to find the requested .Net Framework Data Provider. It may not be installed.
当试图寻找 DbProviderFactories确实在集合(var factoryClasses =)中没有任何东西.
但是我确实安装了12c 4(ODTwithODAC121024)和11g(ODTwithODAC1120320_32bit),并重新启动了机器.
数据库在11g上运行,我可以使用它访问它 PL/SQL developer …
使用Visual Studio 2013,我使用Nuget将最新版本的ODP.NET Managed添加到项目中:
Install-Package odp.net.managed
Run Code Online (Sandbox Code Playgroud)
http://www.nuget.org/packages/odp.net.managed/121.1.2
现在,当我尝试运行以下代码时:
Database db = DatabaseFactory.CreateDatabase();
Run Code Online (Sandbox Code Playgroud)
它抛出以下异常:
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.
Run Code Online (Sandbox Code Playgroud)
在阅读其他用户的类似问题后,我将托管驱动程序部分添加到C:\ Windows\Microsoft.Net\Framework64\v4.0.30319\Config\machine.config:
<system.data>
<DbProviderFactories><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, …Run Code Online (Sandbox Code Playgroud)