Oracle ODP.Net With Entity Framework 6 - Entity framework database compatible provider could not be found

前端 未结 8 1478
面向向阳花
面向向阳花 2020-12-23 17:01

I am trying to build an MVC 5 Web application with Entity Framework 6 that works on Oracle Database , am trying to use ODAC 12c Release 3 which includes support for Entity F

相关标签:
8条回答
  • 2020-12-23 17:08

    I tried everything in the selected answer but I couldn't create my models. I had the same issue as @WAQ in the comments of the selected answer, where I didn't get the error message but it skipped to the table selection.

    I'm using VS2017 15.7.4, Oracle 12g, and EF 6.1.1.

    I decided to downgrade Oracle.ManagedDataAccess.EntityFramework and Oracle.ManagedDataAccess from 18.3.0 to 12.2.1100 and it finally worked!

    0 讨论(0)
  • 2020-12-23 17:13

    My Computer : Win 7 64 bit

    VS 2015

    Oracle Server :

    version 12G - 32 bit

    What I have tried until success :

    -downgrade Oracle.ManagedDataAccess.EntityFramework and Oracle.ManagedDataAccess from 18.3.0 to 12.2.20190115

    -Change Build mode from Any CPU to x86

    -Configuration app.config:

      <configSections>
        <section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    
        <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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
      </configSections>
    
      <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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        </providers>
      </entityFramework>
    
      <system.data>
        <DbProviderFactories>
          <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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        </DbProviderFactories>
      </system.data>
    

    -Nuget installed: Oracle.DataAccess.x86 - v.2.112.1

    Oracle.ManagedDataAccess.EntityFramework - v.12.2.20190115

    Oracle.ManagedDataAccess - v.12.2.1100

    EntityFramework - v.6.2.0

    installed ODAC : ODTwithODAC122011.zip

    0 讨论(0)
  • 2020-12-23 17:14

    Just to complement, i've tried everything but in my case it was solved by setting the "defaultConnectionFactory", like this:

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

    found the solution here: https://community.oracle.com/message/13114643#13114643

    I hope it helps someone...

    0 讨论(0)
  • 2020-12-23 17:22

    I finally was able to to use ODP with EF6.

    I did the following to make it work :-

    First Installing ODAC 12c Release 3 which includes support for Entity Framework 6 Code First and Code First Migrations; NuGet, .NET Framework 4.5.2; and ODP.NET, Managed Driver XML DB. As per

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

    Adding two references , to my project references and they are :

    Oracle.ManagedDataAccess.dll

    Oracle.ManagedDataAccess.EntityFramework.dll

    Installing EF6.1.1 using NuGet by running the following command in Package Manager Console( you can enter it by Tools->NuGet Package Manager -> Package Manager Console):

    Install-Package EntityFramework -Version 6.1.1
    

    And modify your web.config or web.config to use Oracle.ManagedDataAccess , by adding Provider and a valid connection string eg :

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

    Rebuild your Application as x86, and start using EF6 , you can check if it works by adding a model using ADO.Net Entity Model using Code First

    0 讨论(0)
  • 2020-12-23 17:26

    I just had this problem on visual studio 2015. In my case it was due to Entity Framework 6.1.3 not being supported. After downgrading it to 6.1.2 it's working.

    0 讨论(0)
  • 2020-12-23 17:29

    Late joining to this thread. A couple of folks upgraded to VS2017 (the rest in our team are still using VS2015 and planning to upgrade to VS2017). One of our projects was referencing Oracle.ManagedDataAccess.dll ver4.121.2.0 & Oracle.ManagedDataAccess.EntityFramework.dll ver6.121.2.0 via locally-referenced dlls.

    All dev-workstations had oracle-odac-drivers ver4.122.1.0 & ver6.122.1.0 installed system-wide (GAC etc).

    This kind of setup was working just fine for VS2015 but for some weird reason it was not working for VS2017. The culprit for VS2017 was that the Oracle.ManagedDataAccess.dll & Oracle.ManagedDataAccess.EntityFramework.dll where not getting copied over to the output folder of our entry-level asp.net project unless and until the locally referenced dlls where also updated to ver4.121.2.0 & ver6.121.2.0.

    We didn't have time to look any further into all this but the aforementioned solution worked for VS2017.

    0 讨论(0)
提交回复
热议问题