如何在 EF 6 提供程序配置文件中 Add/Activate "Oracle.ManagedDataAccess.Client"?

How to Add/Activate "Oracle.ManagedDataAccess.Client" in the EF 6 provider config file?

我正在学习使用 VS2013 创建 ASP.Net MVC Web 应用程序 these video series。当我收到以下错误时:

No Entity Framework provider found for the ADO.NET provider with invariant name 'Oracle.ManagedDataAccess.Client'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

(视频中使用的数据库提供者是ASP.Net应用程序的自然System.Data.SqlClient,但我需要使用Oracle.ManagedDataAccess.Client)

错误本身是 not new in SO. And, as suggested by the error message and by the accepted answer of the SO question, I checked if the ODP.Net provider is supported by EF 6.0 and I found that it is。尽管如此,我仍然无法使它工作。

我是 MVC 的新手,所以如果有任何 MVC 的概念 application/settings 是我目前理解错误的地方,我会寻求您的理解,我愿意接受您的更正。

一些可能有用的附加信息:

    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="mssqllocaldb" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>

如果您知道除了添加提供程序来解决此问题之外,我还需要做任何其他事情,我也愿意。我在 web.config 文件中的连接字符串如下:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MvcWebApplication1-20160212010850.mdf;Initial Catalog=aspnet-MvcWebApplication1-20160212010850;Integrated Security=True"
    providerName="System.Data.SqlClient" />
   <add name="EmployeeContext" connectionString="Data source=aaaaa;user id=bbbbbb;password=cccccc;persist security info=True"   providerName="Oracle.ManagedDataAccess.Client"/>
</connectionStrings>

我从an Oracle's ODP.Net document and an Oracle Community forum那里得到了答案:

显然,根据已接受的答案,直到 2014 年初,ODAC 才不支持 EF 6,如其 document 中所述。必须部分使用 EF 5 才能使用 Oracle.ManagedDataAccess

然而,当我检查接受的答案所指的文档时,我没有找到暗示回答者所写内容的声明 - 让我相信截至目前,Oracle.ManagedDataAccess 可能得到支持在 EF 6.

然后我发现 this document 其中包含很多技巧来解决在 EF 6 中使用 Oracle.ManagedDataAccess 时可能出现的问题。

对我特别有用的方法是添加:

  1. 配置部分
    <configSections>
      <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </configSections>
  1. 依赖程序集

    <dependentAssembly>
      <publisherPolicy apply="no" />
      <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
      <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.121.2.0" />
    </dependentAssembly>
    

    (我用的是Oracle.ManagedDataAccess版本4.121.2.0)

  2. Entity Framework 提供商

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

全部在Web.config文件中