2014-12-26 29 views
29

Sto provando a creare un'applicazione Web MVC 5 con Entity Framework 6 che funziona su Oracle Database, sto cercando di utilizzare ODAC 12c Release 3 che include il supporto per Entity Framework 6 Code First e Code First Migrations; NuGet, .NET Framework 4.5.2; e ODP.NET, DB XML del driver gestito. Come perOracle ODP.Net con Entity Framework 6 - Impossibile trovare il provider compatibile di database framework Entity

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

ho aggiornamento VS 2013 Community Edition 4.

Sto cercando di aggiungere il modello utilizzando il modello di dati di entità ADO.Net, con codice prima.

Ho il seguente configurato nel mio web.config

<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> 

Ho anche aggiunto Oracle.ManagedDataAccess versione 4.121.2.0 come riferimento e ricostruire la soluzione.

Ho provato ora ad aggiungere il modello utilizzando il modello di dati di entità ADO.Net, con codice prima. ma sto ricevendo il seguente messaggio nell'ultima schermata della procedura guidata:

Il progetto fa riferimento all'ultima versione di entity framework; tuttavia, non è stato possibile trovare un provider di database Entity Framework compatibile con questa versione per la connessione ...

Come potrei configurare correttamente la mia applicazione per poter usare ODAC con il codice EF6 prima?

+0

Ho avuto lo stesso problema, quindi ho trovato questo (http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/EntityFrameworkOBE_2/EntityFrameworkOBE.html#section2), dove si dice: Seleziona Build > Ricrea soluzione dal menu di Visual Studio, che consentirà a questo progetto di iniziare a utilizzare Entity Framework 6. Che ha risolto il mio problema ... – devMomentum

risposta

37

Sono finalmente riuscito a utilizzare ODP con EF6.

Ho fatto la seguente per farlo funzionare: -

Prima Installazione ODAC 12c Release 3, che include il supporto per Entity Framework 6 Codice primo codice prime migrazioni; NuGet, .NET Framework 4.5.2; e ODP.NET, DB XML del driver gestito. Come per

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

l'aggiunta di due riferimenti, ai miei riferimenti del progetto e sono:

Oracle.ManagedDataAccess.dll

Oracle.ManagedDataAccess.EntityFramework.dll

Installazione EF6. 1.1 utilizzando NuGet eseguendo il seguente comando in Package Manager Console (è possibile inserirlo da Strumenti-> Gestore pacchetti NuGet -> Console Gestione pacchetti):

Install-Package EntityFramework -Version 6.1.1 

e modificare il web.config o web.config per usare Oracle.ManagedDataAccess, con l'aggiunta di provider e una stringa di connessione valida ad esempio:

<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> 

Rigenerare l'applicazione come x86, e iniziare a utilizzare EF6, puoi verificare se funziona aggiungendo un modello usando ADO.Net modello entità utilizzando codice Prima

+3

Nella mia applicazione ho impostato tutto, ma sto ancora ricevendo lo stesso errore. –

+0

Ciò potrebbe essere degno di nota. Ho fatto riferimento ai riferimenti sopra menzionati nel mio progetto della libreria del livello dati, ma non nel progetto di applicazione web e ho ricevuto questo errore. Per qualsiasi motivo, l'aggiunta del riferimento Oracle.ManagedDataAccess.EntityFramework al mio progetto di applicazione lo corregge. –

+1

x86 è stato il punto chiave qui per me. –

14

Proprio per completare, ho provato di tutto, ma nel mio caso è stato risolto impostando il "defaultConnectionFactory", in questo modo:

<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> 

trovato qui la soluzione: https://community.oracle.com/message/13114643#13114643

Spero che aiuta qualcuno ...

+0

In realtà questa è l'unica soluzione se non vuoi rovinare la tua macchina con ODAC. Ben fatto, signore! –

+0

Grazie! Questo l'ha risolto per me dopo aver provato tutto il resto. – Gilles

+0

Grazie! Dispongo di ODAC a causa di problemi di compatibilità delle versioni, quindi non utilizzo del driver gestito. Per me ha funzionato anche questo: Oracle.DataAccess.EntityFramework.OracleConnectionFactory –

0

ho appena avuto questo problema su visual Studio 2015. Nel mio caso è stato a causa di Entity Framework 6.1.3 non essere supportato. Dopo aver effettuato il downgrade a 6.1.2, sta funzionando.

0

In ritardo a questo thread. Un paio di persone sono passati a VS2017 (il resto nel nostro team utilizza ancora VS2015 e prevede di passare a VS2017). Uno dei nostri progetti faceva riferimento a Oracle.ManagedDataAccess.dll ver4.121.2.0 & Oracle.ManagedDataAccess.EntityFramework.dll ver6.121.2.0 tramite dll localmente referenziati.

Tutte le postazioni di lavoro avevano i driver oracle-odac ver4.122.1.0 & ver6.122.1.0 installati in tutto il sistema (GAC ecc.).

Questo tipo di installazione funzionava bene per VS2015 ma per qualche strana ragione non funzionava per VS2017. Il colpevole di VS2017 era che Oracle.ManagedDataAccess.dll & Oracle.ManagedDataAccess.EntityFramework.dll non veniva copiato nella cartella di output del nostro progetto entry-level di asp.net a meno che e fino a quando le DLL referenziate localmente, dove venivano anche aggiornate a ver4 .121.2.0 & ver6.121.2.0.

Non abbiamo avuto il tempo di guardare oltre in tutto questo, ma la soluzione di cui sopra ha funzionato per VS2017.

Problemi correlati