Dot-Net

帶有實體框架 6 的 Oracle ODP.Net - 找不到與實體框架數據庫兼容的提供程序

  • December 26, 2014

我正在嘗試使用適用於 Oracle Database 的 Entity Framework 6 建構 MVC 5 Web 應用程序,我正在嘗試使用 ODAC 12c Release 3,其中包括對 Entity Framework 6 Code First 和 Code First 遷移的支持;NuGet,.NET 框架 4.5.2;和 ODP.NET,託管驅動程序 XML DB。按照

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

我有 VS 2013 社區版更新 4 。

我正在嘗試使用 ADO.Net Entity Data Model 添加模型,首先使用程式碼。

我在我的 Web.config 中配置了以下內容

   &lt;configSections&gt;
   &lt;section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /&gt;
   &lt;section name="Oracle.ManagedDataAccess.Client"
            type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /&gt;


 &lt;/configSections&gt;

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

我還添加了 Oracle.ManagedDataAccess 版本 4.121.2.0 作為參考並重建了解決方案。

我現在嘗試使用 ADO.Net Entity Data Model 添加模型,程式碼優先。但在嚮導的最後一個螢幕中收到以下消息:

您的項目引用了最新版本的實體框架;但是,無法為您的連接找到與此版本兼容的實體框架數據庫提供程序…

我怎樣才能正確配置我的應用程序以便能夠首先將 ODAC 與 EF6 程式碼一起使用?

我終於能夠在 EF6 中使用 ODP。

我做了以下工作以使其工作:-

首先安裝 ODAC 12c 第 3 版,其中包括對 Entity Framework 6 Code First 和 Code First 遷移的支持;NuGet,.NET 框架 4.5.2;和 ODP.NET,託管驅動程序 XML DB。按照

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

在我的項目引用中添加兩個引用,它們是:

Oracle.ManagedDataAccess.dll

Oracle.ManagedDataAccess.EntityFramework.dll

通過在包管理器控制台中執行以下命令,使用 NuGet 安裝 EF6.1.1(您可以通過工具 -> NuGet 包管理器 -> 包管理器控制台輸入):

Install-Package EntityFramework -Version 6.1.1

並修改您的 web.config 或 web.config 以使用 Oracle.ManagedDataAccess ,方法是添加 Provider 和有效的連接字元串,例如:

&lt;configSections&gt;
   &lt;section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /&gt;
   &lt;section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /&gt;
   &lt;!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --&gt;
 &lt;/configSections&gt;
 &lt;entityFramework&gt;
   &lt;contexts&gt;
     &lt;context type="App.Context.Default, App.Context"&gt;
       &lt;databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" /&gt;
     &lt;/context&gt;
   &lt;/contexts&gt;
   &lt;defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /&gt;
   &lt;providers&gt;
     &lt;provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /&gt;
     &lt;provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /&gt;
   &lt;/providers&gt;
 &lt;/entityFramework&gt;
 &lt;connectionStrings&gt;
   &lt;add name="Default" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=XE;USER ID=User" /&gt;
 &lt;/connectionStrings&gt;

將您的應用程序重建為 x86,並開始使用 EF6 ,您可以通過使用 Code First 使用 ADO.Net Entity Model 添加模型來檢查它是否有效

引用自:https://stackoverflow.com/questions/27656519