33

我正在尝试将实体框架与 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”部分注册它的信息。

其他一些帖子(示例)建议将提供程序添加到该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>
4

11 回答 11

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 中。试试!

于 2014-03-04T08:23:03.087 回答
30

您需要在 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

于 2013-11-11T04:36:15.543 回答
9

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

在经历了每个可用的连接器/NET 的地狱之后,我让它与连接器/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. 安装“连接器/网络”v6.9.10(连接器/网络)。 https://i.stack.imgur.com/XOT1I.jpg注意:我首先尝试使用 Connector/NET v6.8、v6.10 和 v8,但它们都不起作用在这里您可以找到所有连接器版本和与 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 提供者信息,如下所示:

<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 提供程序的实体框架提供程序

于 2017-11-26T16:30:47.993 回答
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)。
于 2014-02-17T22:42:12.070 回答
4

我已经从 EntityFramework 5.0 更新到 6.1 和 MySQL 连接器 6.8.3,只需要添加属性就可以让事情再次发生。在添加属性之前,一切都可以正常编译,但在运行时会崩溃。

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
于 2014-04-17T17:19:27.700 回答
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. 为所有项目启用每个包。
于 2014-08-25T01:15:41.947 回答
1

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

于 2015-01-23T11:46:24.737 回答
1

从 nuget https://www.nuget.org/packages/MySql.Data.Entity/安装最新版本

于 2015-08-31T14:24:06.300 回答
1

就我而言,这是一个缺失的参考。升级到 EntityFramework 6 时,需要添加对程序集的引用

系统.数据.实体

我认为这是因为 MySql.Data.Entity.EF6 继承了这个程序集中的一堆东西,它不适用于以前版本的 EF。

当您的 app.config 良好并且您的所有参考资料看起来都很好时,这是一个值得检查的解决方案。

于 2017-01-17T14:37:40.330 回答
0

没关系。我注意到我安装了 EF 6。我删除了它并尝试了 EF 5(NuGet 说它是最新的稳定版本),它开始工作了。

不过,更有用的错误消息会很好!

于 2013-02-28T20:13:03.570 回答
0

可能只是 MySql 提供程序安装在机器配置中(例如通过 .net 连接器安装程序?默认连接工厂也应该类似于“MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" 我猜...

于 2013-07-13T13:03:05.740 回答