it-swarm.com.de

Der ADO.NET-Anbieter 'Oracle.ManagedDataAccess.Client' ist entweder nicht in der Maschinen- oder Anwendungskonfigurationsdatei registriert oder konnte nicht geladen werden

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 developerenter image description here

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?

6

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.

5

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.

4
Fnk

Ich habe dies durch Hinzufügen von ODP.NET (Oracle.ManagedDataAccess.EntityFramework 12c) von NuGet behoben. Ich verwende VS2015 mit EF 6.2.0.

2
kmxr

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 

1
Nitin Patil