3

我正在按照这些视频系列学习使用 VS2013 制作 ASP.Net MVC Web 应用程序。当我收到以下错误时:

找不到具有不变名称“Oracle.ManagedDataAccess.Client”的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882

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

错误本身在 SO中并不新鲜。而且,正如错误消息和 SO 问题的已接受答案所建议的那样,我检查了 ODP.Net 提供程序是否受 EF 6.0 支持,我发现它是. 尽管如此,我仍然无法使其工作。

我对 MVC 很陌生,所以如果我在这一点上理解错误的 MVC 应用程序/设置的任何概念,我会寻求您的理解,我愿意接受您的更正。

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

  • 我使用我的 VS2013 提供的 ASP.Net Web 应用程序模板来启动项目。我为它使用 MVC 模板,并且只使用“为 MVC 添加文件夹和核心引用”。我既不是“添加单元测试”也不是“在云中托管”
  • 在模板中,没有app.config文件,但有Web.config文件(这有什么区别吗?错误消息中建议“确保提供程序已在应用程序配置文件的'entityFramework'部分注册”。)
  • 在 Web.config 文件中,我找到了以下entityFramework部分:
    <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>
  • 我注意到有

    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />` 
    

    在那里排队。因此我尝试类似地添加:

    <provider invariantName="Oracle.ManagedDataAccess.Client" type=???, EntityFramework.???" />
    

    但我不知道为type属性写什么,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>
4

1 回答 1

0

我从Oracle 的 ODP.Net 文档Oracle 社区论坛中得到了答案:

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

但是,当我检查接受的答案所指的文档时,我没有找到暗示回答者所写内容的声明——这让我相信,到目前为止,Oracle.ManagedDataAccessEF 6 可能已经支持。

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

对我特别有用的是添加:

  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. 实体框架提供者

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

全部在Web.config文件中

于 2016-02-15T06:49:13.837 回答