实体框架:无法识别的元素“提供者”例外

时间:2014-09-16 00:58:58

标签: c# .net entity-framework entity-framework-4

当我在.NET 4.0中使用Entity Framework 5.0.0时,我在运行时获得无法识别的元素'提供商' 异常。实际上,在.NET 4.0中,当我使用NuGet进行安装包时,它会加载实体框架的4.4.0版本。当我从资源管理器中检查文件的属性时,我可以看到:

enter image description here

这是我的配置文件

 <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <connectionStrings>
    <add name="xxx" connectionString="metadata=res://*/StreetMusicModel.csdl|res://*/StreetMusicModel.ssdl|res://*/StreetMusicModel.msl;         provider=MySql.Data.MySqlClient;provider connection string='         server=xxx.net;         user id=xxx;         password=xxx;         database=xxx'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v12.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
    </providers>
  </entityFramework>

我感觉Entity Framework 4.4.0无法识别标签。我可以删除或重命名该部分吗?当我删除该部分时,我得到另一个例外:底层提供程序在打开时失败

2 个答案:

答案 0 :(得分:59)

使用Nuget将EF从版本6降级到版本5.0.0后,我遇到了这个问题。我认为问题在于添加EF v6时会添加提供程序配置,但在降级后不会删除。因此,您只需删除<providers>代码中的内容和代码本身,它就可以正常工作:

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v12.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

答案 1 :(得分:0)

您需要从项目的app.config文件中删除该标记,而不是从YourProjectName.dll.config文件中删除该标记,因为它会在您构建项目后自动将其从YourProjectName.dll.config中删除。

注意:答案可在上述评论中找到。我刚刚在这里结合了答案。