2014-12-26 13 views
29

Ich versuche, eine MVC 5-Webanwendung mit Entity Framework 6 zu erstellen, die auf Oracle-Datenbank funktioniert, versuche ODAC 12c Release 3 zu verwenden umfasst Unterstützung für Code First und Code First Migration von Entity Framework 6; NuGet, .NET Framework 4.5.2; und ODP.NET, Verwaltete Treiber-XML-DB. Wie proOracle ODP.Net mit Entity Framework 6 - Entitätsframework-Datenbank-kompatibler Provider konnte nicht gefunden werden

http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

Ich habe VS 2013 Community Edition Update 4.

Ich versuche, Modell mit ADO.Net-Entity-Datenmodell mit Code zuerst hinzuzufügen.

Ich habe das in meinem Web.config konfiguriert folgenden

<configSections> 
    <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.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 


    </configSections> 

    <entityFramework> 
    <contexts> 
     <context type="Tamayz.Context.Default, Tamayz.Context"> 
     <databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" /> 
     </context> 
    </contexts> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="Oracle.ManagedDataAccess.Client" 
       type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </providers> 
    </entityFramework> 

Ich habe auch Oracle.ManagedDataAccess Version 4.121.2.0 als Referenz und die Lösung wieder aufzubauen.

Ich habe jetzt versucht, Modell mit ADO.Net Entity Data Model, mit Code zuerst hinzuzufügen. aber ich erhalte die folgende Nachricht auf dem letzten Bildschirm des Assistenten:

Ihr Projekt verweist auf die neueste Version von Entity Framework; Es wurde jedoch kein Entity Framework-Datenbankanbieter gefunden, der mit dieser Version kompatibel ist.

Wie kann ich meine Anwendung richtig konfigurieren, um ODAC mit EF6-Code zuerst verwenden zu können?

+0

Ich hatte das gleiche Problem, dann fand dies (http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/EntityFrameworkOBE_2/EntityFrameworkOBE.html#section2), wo sie sagen: Wählen Sie Build > Erstellen Sie eine Lösung aus dem Visual Studio-Menü, wodurch dieses Projekt mit Entity Framework 6 gestartet werden kann. Das hat mein Problem behoben ... – devMomentum

Antwort

37

Ich konnte schließlich ODP mit EF6 verwenden.

Ich habe folgendes, damit es funktioniert: -

Erste Installation ODAC 12c Release 3 die erste Migrations-Unterstützung für Entity Framework 6-Code erster Kodex enthält; NuGet, .NET Framework 4.5.2; und ODP.NET, Verwaltete Treiber-XML-DB. Wie pro

http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

Hinzufügen von zwei Referenzen, um meine Projektreferenzen und sie sind:

Oracle.ManagedDataAccess.dll

Oracle.ManagedDataAccess.EntityFramework.dll

EF6 installieren. 1.1 Verwenden Sie NuGet, indem Sie den folgenden Befehl in der Package Manager Console ausführen (Sie können ihn über Extras-> NuGet Package Manager -> Package Manager Console eingeben):

Install-Package EntityFramework -Version 6.1.1 

und ändern Sie Ihre web.config oder web.config Oracle.ManagedDataAccess zu verwenden, indem Provider Hinzufügen und eine gültige Verbindungszeichenfolge zB:

<configSections> 
    <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" /> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    </configSections> 
    <entityFramework> 
    <contexts> 
     <context type="App.Context.Default, App.Context"> 
     <databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" /> 
     </context> 
    </contexts> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
    <connectionStrings> 
    <add name="Default" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=XE;USER ID=User" /> 
    </connectionStrings> 

Ihre Anwendung als x86 neu aufbauen, und starten Sie EF6 verwenden, Sie können überprüfen, ob dies funktioniert, indem Sie ein Modell mit ADO hinzufügen.Net Entity Modell mit Code Ersten

+3

In meiner Anwendung habe ich alles eingestellt, aber ich bekomme immer noch den gleichen Fehler. –

+0

Dies könnte bemerkenswert sein. Ich hatte die oben erwähnten Verweise in meinem Datenschichtbibliotheksprojekt, aber nicht im Webanwendungsprojekt referenziert und diesen Fehler erhalten. Aus irgendeinem Grund wird durch Hinzufügen der Oracle.ManagedDataAccess.EntityFramework-Referenz zu meinem Anwendungsprojekt das Problem behoben. –

+1

x86 war der entscheidende Punkt für mich. –

14

nur zu ergänzen, ich habe alles versucht, aber in meinem Fall war es durch Setzen des „defaultConnectionFactory“, wie dieses Problem gelöst:

<entityFramework> 
<defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework"> 
</defaultConnectionFactory> 
<providers> 
    <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
</providers> 
</entityFramework> 

die Lösung hier gefunden: https://community.oracle.com/message/13114643#13114643

ich hoffe, dass es jemand hilft ...

+0

Eigentlich ist dies die einzige Lösung, wenn Sie Ihre Maschine nicht mit ODAC verderben wollen. Gut gemacht, Sir! –

+0

Danke! Dies löste es für mich, nachdem ich alles andere versucht hatte. – Gilles

+0

Danke! Ich habe ODAC aufgrund von Problemen mit der Versionskompatibilität und verwende keinen verwalteten Treiber. Für mich hat das auch funktioniert: Oracle.DataAccess.EntityFramework.OracleConnectionFactory –

0

ich dieses Problem hatte gerade auf Visual Studio 2015. In meinem Fall war es aufgrund Entity Framework 6.1.3 nicht unterstützt. Nach dem Herunterstufen auf 6.1.2 funktioniert es.

0

Späte Verbindung mit diesem Thread. Ein paar Leute haben ein Upgrade auf VS2017 durchgeführt (der Rest in unserem Team verwendet immer noch VS2015 und plant, auf VS2017 zu aktualisieren). Eines unserer Projekte bezog sich auf Oracle.ManagedDataAccess.dll ver4.121.2.0 & Oracle.ManagedDataAccess.EntityFramework.dll ver6.121.2.0 über lokal referenzierte DLLs.

Alle dev-Workstations hatten oracle-odac-Treiber ver4.122.1.0 & ver6.122.1.0 systemweit installiert (GAC usw.).

Diese Art von Setup funktionierte gut für VS2015, aber aus irgendeinem seltsamen Grund funktionierte es nicht für VS2017. Der Übeltäter für VS2017 war, dass die Oracle.ManagedDataAccess.dll & Oracle.ManagedDataAccess.EntityFramework.dll nicht in den Ausgabeordner unseres asp.net-Einstiegsprojekts kopiert wurde, außer und bis die lokal referenzierten DLLs auch auf ver4 aktualisiert wurden .121.2.0 & ver6.121.2.0.

Wir hatten keine Zeit, weiter zu schauen, aber die oben erwähnte Lösung funktionierte für VS2017.

Verwandte Themen