找不到'MySql.Data.MySqlClient'ADO.NET提供程序的实体框架提供程序

时间:2013-02-28 18:24:10

标签: mysql entity-framework

我正在尝试使用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>

11 个答案:

答案 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并按照以下步骤操作它。

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

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

  3. 安装“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,但到目前为止这个列表不准确。

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

  5. 添加对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

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

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

    1. 重建项目。
    2. 就是这样。 VS2017准备好了。希望这对所有人都有效,就像今天对我一样。

      <强>参考

      1. Can't Create Entity Data Model - using MySql and EF6

      2. No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider

答案 3 :(得分:4)

只需添加版本摘要(因为我看到你正在尝试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)。

答案 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管理包,但只将它们包含在主项目中。解决方案是

  1. 右键单击解决方案(解决方案资源管理器中的顶级)
  2. 管理解决方案的Nuget包
  3. 转到已安装标签
  4. 对于所有与EntityFramework相关的包(MySql.Data,MySql.Data.Entities,MySql.ConnectorNET.Entity和MySql.ConnectorNET.Data),选择它们,然后选择“管理”按钮。
  5. 为所有项目启用每个包。

答案 6 :(得分:1)

为了将来参考,这里是使用带有EF 6的MySQL Connector / Net的官方指南,其中包括所有必要的步骤(程序集,配置等): Chapter 10 EF 6 Support

答案 7 :(得分:1)

答案 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”,我猜......