我正在尝试使用MySQL的Entity Framework,我得到了上述错误。我安装了最新的MySQL连接器。
完整错误如下:
No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider. Make sure the provider is registered in the 'entityFramework' section of the application config file.
但是,我找不到任何暗示你如何在'entityFramework'部分注册的内容。
其他一些帖子(example)建议将提供商添加到system.Data
DbProviderFactories
部分,如下所示:
<DbProviderFactories>
<add
name="MySQL Data Provider"
invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,
Version=6.2.3.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
但这不起作用,因为它声称invariant
名称是重复的。而且,如果我实际遍历System.Data.Common.DbProviderFactories
,我可以看到最后一个是MySQL提供者:
MySQL Data Provider
.Net Framework Data Provider for MySQL
MySql.Data.MySqlClient
MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d
所以提供商在那里,但EF拒绝使用它。有什么想法吗?
我的完整配置如下所示:
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.data>
<!--<DbProviderFactories>
<add
name="MySQL Data Provider"
invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,
Version=6.2.3.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>-->
</system.data>
<connectionStrings>
<add name="myContext" connectionString="server=****;User Id=****;password=****;Persist Security Info=True;database=myDb"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration>
答案 0 :(得分:33)
在EF5或更低,一切都好。 在EF6中,你需要使用mysql连接器6.8.x,并将DbConfigurationTypeAttribute添加到你的DbContext:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
其中MySqlEFConfiguration位于6.8.x中的MySql.Data.Entity.EF6.dll中。试一试!
答案 1 :(得分:28)
您需要在config(EF 5)中创建此部分:
<entityFramework>
<!-- ... -->
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
</providers>
</entityFramework>
更新:将此定义用于EF 6:
<entityFramework>
<!-- ... -->
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
感谢 elcool 。
答案 2 :(得分:6)
在尝试使用MySQL,ADO.NET(数据库优先)和EF6配置Visual Studio Professional 2017环境时,我遇到了同样的情况。
在每个连接器/ NET可用之后,我使用Connector / NET v6.9.10并按照以下步骤操作它。
如果已安装,请卸载/删除“Connector / NET”和“MySQL for Visual Studio”。
安装“MySQL for Visual Studio”v2.0.5 CTP(MySQL for Visual Studio)。 注意:在Connector / NET之前为Visual Studio安装MySQL。
安装“Connector / NET”v6.9.10(Connector/Net)。 https://i.stack.imgur.com/XOT1I.jpg注意:我首先尝试使用Connector / NET v6.8,v6.10和v8,但没有一个工作Here you can find all Connector Versions and Compatibilities with Visual Studio IDEs,但到目前为止这个列表不准确。
通过NuGet下载并安装“EntityFramework”v6.2.0。
添加对C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dll
的引用
和
C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll
。
在实体框架提供程序下的App.config中添加MySQL EF6提供程序信息,如下所示:
<entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
就是这样。 VS2017准备好了。希望这对所有人都有效,就像今天对我一样。
<强>参考强>:
答案 3 :(得分:4)
只需添加版本摘要(因为我看到你正在尝试6.2,这太旧了)
答案 4 :(得分:4)
我已经从EntityFramework 5.0更新到6.1和MySQL连接器6.8.3,只需添加该属性即可重新开始。在添加属性之前,所有内容都可以正常编译但在运行时崩溃。
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
答案 5 :(得分:1)
我尝试了配置字符串和设置的每个不同组合,但我终于想通了。我的解决方案在一个项目中包含源代码,在另一个项目中测试。我使用的是Entity Framework 6.1.1,并为Visual Studio 1.2.3安装了MySql Connector 6.8.3和MySql。
问题是我让NuGet管理包,但只将它们包含在主项目中。解决方案是
答案 6 :(得分:1)
为了将来参考,这里是使用带有EF 6的MySQL Connector / Net的官方指南,其中包括所有必要的步骤(程序集,配置等): Chapter 10 EF 6 Support
答案 7 :(得分:1)
从nuget安装最新版本 https://www.nuget.org/packages/MySql.Data.Entity/
答案 8 :(得分:1)
就我而言,这是一个缺失的参考。升级到EntityFramework 6时,需要添加对程序集的引用
System.Data.Entity的
我认为这是因为MySql.Data.Entity.EF6继承了这个程序集中的一堆东西,它不适用于以前版本的EF。
当你的app.config很好并且你的所有推荐都很好时,这是一个值得检查的解决方案。
答案 9 :(得分:0)
没关系。我注意到我安装了EF 6。我删除了它并尝试了EF 5(NuGet说这是最新的稳定版本)并且它开始工作了。
但是,更有用的错误信息本来不错!
答案 10 :(得分:0)
可能只是在机器配置中安装了MySql提供程序(例如.net连接器安装程序? 此外,默认连接工厂应该类似于“MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data,Version = 6.7.4.0,Culture = neutral,PublicKeyToken = c5687fc88969c44d”,我猜......