没有找到适用于'MySql.Data.MySqlClient' ADO.NET提供程序的Entity Framework提供程序

36
我正在尝试使用Entity Framework和MySQL,但出现了上述错误。我已经安装了最新的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>
11个回答

34

在 EF5 或更低版本中,一切正常。 在 EF6 中,您需要使用 mysql connector 6.8.x,并在 DbContext 中添加 DbConfigurationTypeAttribute:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}

MySqlEFConfiguration 是在 6.8.x 版本的 MySql.Data.Entity.EF6.dll 中。尝试一下吧!


5
可以工作,但是作为解决方案很糟糕,因为这样代码就会依赖于 MySQL 而不仅仅是配置... - mycroes
3
添加这个属性确实解决了我的问题,但是在代码中依赖MySQL是很麻烦的。更好的方法是按照以下方式添加配置:<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> - Denis Stepanenko
我有正确的配置,但开始看到这个错误。我根据变化开始更改我的配置,但是没有任何作用。然后我关闭了VS.NET并重新打开了解决方案,一切都恢复正常了。 - Nicholas
谢谢伙计,你救了我的一天。 - Prashant

30

您需要在配置文件中创建此部分(对于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


EF6现在得到支持。我正在使用连接器6.9.6,在您的代码中用MySql.Data.Entity.EF6替换MySql.Data.Entity。并添加引用。 - elcool
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 加入这个是让我解决问题的关键。谢谢 - stephen ebichondo
太好了!谢谢。这节省了我配置错误的时间。 - Umesh Sehta

9

我刚刚在尝试配置Visual Studio Professional 2017环境与MySQL、ADO.NET(数据库优先)和EF6时遇到了同样的情况。

在尝试了所有可用的连接器/NET后,我最终使用Connector/NET v6.9.10并按照以下步骤操作使其正常工作。

  1. 卸载/删除已安装的“Connector/NET”和“MySQL for Visual Studio”。

  2. 安装“MySQL for Visual Studio”v2.0.5 CTP (MySQL for Visual Studio)。 注意:在安装Connector/NET之前安装MySQL for Visual Studio。

  3. 安装“Connector/NET”v6.9.10 (Connector/Net)。 https://istack.dev59.com/XOT1I.webp 注意:我首先尝试使用Connector/NET v6.8、v6.10和v8,但它们都不能正常工作。在此处您可以找到所有Connector版本及其与Visual Studio IDE的兼容性,但目前此列表不准确。

  4. 通过NuGet下载并安装“EntityFramework”v6.2.0。

  5. 将引用添加到C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dllC:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll

  6. 在App.config下的实体框架提供程序中添加MySQL EF6提供程序信息,如下所示:

<entityFramework>
       <providers>
         <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
       </providers>
</entityFramework>

  1. 重新构建项目。

就是这样。VS2017已经准备好了。希望这对每个人都有效,就像今天对我一样。

参考资料:

  1. 无法创建实体数据模型 - 使用MySql和EF6

  2. 找不到“MySql.Data.MySqlClient”ADO.NET提供程序的Entity Framework提供程序


注释不应该出现在答案部分。 - Mathews Sunny

5

只是添加一个版本的摘要(因为我看到你正在尝试6.2,这个版本太旧了)

  • 对于EF4,请使用Connector/NET 6.6.x(当前GA为6.6.6)
  • 对于EF5,请使用Connector/NET 6.7.x(当前GA为6.7.4)或Connector/NET 6.8.x(当前GA为6.8.3)。
  • 对于EF6,请使用Connector/NET 6.8.x(当前GA为6.8.3)。

1
这个问题已经快一年了,所以我不知道当时它是否太旧了,但是对于有用的总结加上一个赞。 - Matt Burland
1
在更换我的开发系统后,我花了两个星期才能运行该应用程序。最终我偶然找到了这个答案。现在应用程序似乎可以正常工作了。非常感谢你,加100分。 - Abhijeet Nagre

4
我已将 EntityFramework 从5.0 升级到6.1,同时也升级了 MySQL connector 至 6.8.3。只需要添加属性即可让程序重新运行。在添加属性之前,编译都能通过,但在运行时会崩溃。
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}

这对我来说是答案。希望它能得到更多的赞,我们将有一个更现代化的被接受的答案。谢谢! - Simon Tower

1
在我的情况下,是一个缺失的引用。当你升级到EntityFramework 6时,你需要添加对该程序集的引用。

System.Data.Entity

我认为这是因为MySql.Data.Entity.EF6从此程序集中继承了大量内容,而之前的EF版本没有这样做。
当你的app.config正确无误且所有引用看起来都很好时,这是值得检查的解决方案。

1
我尝试了所有不同的配置字符串和设置,但最终找到了解决方法。我的解决方案是将源代码放在一个项目中,测试放在另一个项目中。我使用的是Entity Framework 6.1.1,并安装了MySql Connector 6.8.3和MySql for Visual Studio 1.2.3。
问题是我让NuGet管理这些包,但只在主项目中包含了它们。解决方法是:
  1. 右键单击解决方案(在解决方案资源管理器中的顶层)
  2. 管理解决方案的NuGet包
  3. 转到已安装选项卡
  4. 对于所有与EntityFramework相关的包(MySql.Data、MySql.Data.Entities、MySql.ConnectorNET.Entity和MySql.ConnectorNET.Data),选择它们,然后选择“管理”按钮。
  5. 为所有项目启用每个包。

谢谢伙计,你救了我的一天。 - Prashant

1

为了以后参考,这里是有关使用MySQL Connector/Net与EF 6的官方指南,其中包括所有必要的步骤(程序集、配置等):第10章 EF 6支持



0

机器配置中可能只安装了MySql提供程序(例如通过.NET连接器安装程序)?此外,默认的连接工厂应该是像“MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data,Version=6.7.4.0,Culture=neutral,PublicKeyToken = c5687fc88969c44d”这样的东西吧...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接