Ich verwende .NET4.5.1
, MVC5
, EF6
, mit Oracle.ManagedDataAccess 4.121.1.0
und Oracle.ManagedDataAccess.EntityFramework 6.121.2.0
Ich konnte Model aus der vorhandenen Datenbank generieren (Teil davon, indem ich Tabelle für Tabelle hinzufügte).
Wenn ich jedoch versuche, Testabfrage auszuführen, um zu sehen, ob die Daten abgerufen werden können
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);
}
}
es schlägt fehl (am var result = ...
) mit Unable to find the requested .Net Framework Data Provider. It may not be installed.
Beim Versuch, zu suchenDbProviderFactories
gibt es tatsächlich nichts in der Sammlung (var factoryClasses =
).
Ich habe 12c 4 (ODTwithODAC121024) und 11g (ODTwithODAC1120320_32bit) installiert und die Maschine neu gestartet.
Die Datenbank läuft auf 11g und ich kann mit PL/SQL developer
Web.config sieht folgendermaßen aus:
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
.....
<connectionStrings>
.....
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=Oracle_user;Password=Oracle_user_password;Data Source=Oracle" />
<add name="Entities" connectionString="metadata=res://*/OracleDb.csdl|res://*/OracleDb.ssdl|res://*/OracleDb.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='data source=******" providerName="System.Data.EntityClient" /> </connectionStrings>
......
<system.data>
<DbProviderFactories>
<!-- Remove in case this is already defined in machine.config -->
<add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
Meine Annahme schlägt fehl, weil Oracle nicht in DbProviderFactories
oder irgendwo registriert ist
Wie registriere ich Oracle in DbProviderFactories? Oder wenn dies nicht der Fall ist, was ist mit meinem Setup falsch?
Herausgefunden.
In meinem machine.config
gab es schon
<add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
und dann wurde es in meinem web.config
wiederholt, der stillschweigend keine Anbieter ausgeben würde. Also nach dem Herausnehmen:
<add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
Ich habe es zum Laufen gebracht.
Dieser Fehler ist bei der Aktualisierung von Visual Studio 2017 aufgetreten. Der Fehler kann durch die Neuinstallation von ODT für VS 2017 behoben werden:
1) Schließen Sie Visual Studio.
2) Deinstallieren Sie die vorhandenen Oracle Developer Tools für Visual Studio 2017 über die Systemsteuerung.
3) Installieren Sie die neueste (ODTforVS2017_122011.exe) über den folgenden Link:
http://www.Oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2017-3806459.html
4) Öffnen Sie Visual Studio und erstellen Sie eine Lösung. Der Fehler sollte jetzt nicht generiert werden.
Ich habe dies durch Hinzufügen von ODP.NET (Oracle.ManagedDataAccess.EntityFramework 12c) von NuGet behoben. Ich verwende VS2015 mit EF 6.2.0.
Ich habe diesen Fehler gerade behoben, indem ich das Oracle Developer Tool für Visual Studio 2013 (meine installierte VS-Version) ODTforVS2013_121025.exe installiert habe