当我在.NET 4.0中使用Entity Framework 5.0.0时,我在运行时获得无法识别的元素'提供商' 异常。实际上,在.NET 4.0中,当我使用NuGet进行安装包时,它会加载实体框架的4.4.0版本。当我从资源管理器中检查文件的属性时,我可以看到:
这是我的配置文件
<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无法识别标签。我可以删除或重命名该部分吗?当我删除该部分时,我得到另一个例外:底层提供程序在打开时失败。
答案 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中删除。
注意:答案可在上述评论中找到。我刚刚在这里结合了答案。