我正在使用.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 …
我正在尝试学习并弄清楚是否可以将MVC,EF,ODAC 11.2.0.3应用程序部署到安装了先前版本的ODP.NET的服务器上.我想我可以使用Oracle Instant Client,而不是更新服务器ODP.NET(我不能).
这可行吗?
1)我将这些dll添加到我的项目中以支持Instant Client
-Oracle.DataAccess.dll
-oci.dll
-ociw32.dll
-orannzsbb11.dll
-oraociei11.dll
-OraOps11w.dll
2)接下来,我更新了dbProviderFactories的web.config
<system.data>
<DbProviderFactories>
<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" />
</DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)
3)这个(afaik)是如何在bin rathre中使用Oracle dll而不是GAC
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
4)最后我的connectionString
<connectionStrings>
<add name="Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;
provider connection string="DATA SOURCE=XXX;PASSWORD=XXX;PERSIST SECURITY INFO=True;USER ID=XXX"" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误无法找到请求的.Net Framework数据提供程序.它可能没有安装.
我非常感谢这里的任何帮助.我很新,有很多东西需要学习.提前致谢.干杯