【问题标题】:MySQL Connector with EF6 in Visual Studio 2013Visual Studio 2013 中带有 EF6 的 MySQL 连接器
【发布时间】:2014-12-04 12:00:27
【问题描述】:

我正在尝试通过 C# .NET Web MVC 应用程序连接到 MySQL。

我的问题是,当我尝试根据我的 MySQL 连接添加从数据库生成的 ADO.NET 实体数据模型时,我收到以下错误消息:

您的项目引用了最新版本的实体框架; 但是,实体框架数据库提供程序兼容 无法为您的数据连接找到此版本。 退出此向导,安装兼容的提供程序, 并在执行此操作之前重建您的项目

我正在运行以下软件、升级和附加组件:

  • Visual Studio 2013
  • MySQL 服务器 v5.6.21
  • MySQL For Visual Studio v1.2.3
  • 连接器/NET v6.9.4

NuGet 包:

  • EntityFramework v6.1.1
  • MySQL.Data v6.9.3
  • MySQL.Data.Entities v6.8.3.0
  • SQL.Web v6.9.3

我的 web.config,entityFramework 块:

    ..
</system.webServer>
<entityFramework>
  <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
  <providers>
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
  </providers>
</entityFramework>
<runtime>
    ..

我查看了我可以在 SO 上找到的所有其他解决方案,通常是通过 google,尝试了所有解决方案,但似乎没有一个解决方案有效或适用于非常不同版本的 Connector/NET 或其他程序需要。

谁能发现我做错了什么?

【问题讨论】:

  • 我建议安装最新的 MySQL for Visual Studio 版本(1.2.3)。看起来您安装的 1.1.1 与安装的 Connector/NET v6.9.4 不兼容,请参阅(表 4.1):dev.mysql.com/doc/connector-net/en/…
  • 您好 - 我刚刚检查了一下,显然我已经有了 MySQL for Visual Studio v1.2.3。不过谢谢! :)

标签: c# mysql asp.net-mvc entity-framework


【解决方案1】:

现在这不是我自己遇到的问题,但我确实找到了以下可能的解决方案:

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

我在这里注意到的是他有两个额外的包,你没有提到“MySql.ConnectorNET.Entity”和“MySql.ConnectorNet.Data”。可能是您缺少这些,而它们是使用 Entity Framework 6.1.1 所必需的

(来源:No Entity Framework Provider Found For

【讨论】:

  • 您好。在您指出之后,我发现我已经安装了 MySQL.ConnectorNET.Entity,现在已经安装了 MySQL.ConnectorNET.Data,但无济于事。我也尝试了可能的解决方案,但似乎没有用。不过谢谢!
【解决方案2】:

我有一个使用 MySQL 连接器库版本 6.8.3 和 EF6 v6.0.0 的工作项目。我记得这个错误,我想我解决了手动向 app.config 添加一些行。

我列出了我的 app.config 中与 EF6 和 MySQL 配置相关的行,与你的不同,也许对你有帮助:

<configSections>
    ...

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
</entityFramework>

我已经安装了 MySQL Connector Net 6.8.3 和从 MySQL 站点下载的包,并添加了对项目的两个引用:MySql.Data 和 MySql.Data.Entity.EF6,都是 6.8.3 版本(我注意到你是使用此文件的不同版本...)。

我通过 Nuget 将 EF6 (v 6.0.0) 添加到项目中。

不是最新版本,但希望对您有所帮助。

【讨论】:

  • 嗨!我尝试了您的解决方案,但无济于事:(谢谢!
【解决方案3】:

基本解决方案是重新安装 MySQL 和 VisualStudio包括 Entity 和 .NET。

由于某种原因,我不确定为什么,安装过程会损坏 DLL,或者至少这是我和其他同事的经验。我们的解决方案是尝试以上所有方法均无济于事。所以最后我们尝试重新安装,它成功了。所以试试吧:)

【讨论】:

  • 重新安装成功了,谢谢拉尔斯!下一个寻找的人的快速旁注。重新安装后,您可能会遇到 ADO.NET 对象向导崩溃。这可以通过以下方式解决:“原来是我的项目中的引用必须从扩展选项卡中删除并再次选择。然后我编译了所有内容并使用“数据库中的代码优先”,它工作正常!“来自: forums.mysql.com/read.php?174,606395,618190#msg-618190 至少对我有用。
  • 唉,很不清楚:删除哪些引用? Visual Studio 2014 中的“扩展选项卡”在哪里;从数据库中选择 Code First 而不是“从数据库中选择 EF 设计器”仍然会使向导消失
【解决方案4】:

我有同样的问题。安装后:

  • Visual Studio 2013 社区版
  • 适用于 Visual Studio 1.2.3 的 MySQL
  • MySQL 连接器 .NET 6.9.5

我不想重新安装Visual Studio,所以经过一些测试,我发现文件夹“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies " 包含以下文件的旧版本:

  • MySql.Data.dll
  • MySql.Data.Entity.EF6.dll
  • MySql.Web.dll

关闭 Visual Studio 后,我将这些文件替换为“C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.5”中的文件,现在它有效!

注意:将上面子文件夹名称中的 6.9.5 替换为系统中安装的实际版本。

【讨论】:

  • 谢谢!这是我启动新机器时的目标。
  • 谢谢!就我而言,我使用的是 .Net 4.0,所以我从 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.X\Assemblies\v4.0 获取文件
  • 这是我读过的所有内容中唯一有效的解决方案。非常感谢。
  • 希望这能奏效,但它破坏了 add ado.net 实体数据模型 ui
【解决方案5】:

解决方案是将其添加到您尝试添加/修改数据模型的项目的app.config / web.config

  <system.data>
    <DbProviderFactories>
      <clear />
      <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.9.5.0, 
                 Culture=neutral, 
                 PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

根据您的连接器更改版本。

【讨论】:

    【解决方案6】:

    如果您需要将 EntityFramework 与 mysql 数据库一起使用,您只需使用包管理器控制台安装旧版本的 EntityFramework,如 v 5.0。编写安装包 EntityFramework -Version 5.0.0。 享受。 https://www.nuget.org/packages/EntityFramework/5.0.0

    【讨论】:

      【解决方案7】:

      只需添加到 web.config:

         <system.data>
          <DbProviderFactories>
            <clear />
            <add name="MySQL Data Provider"
                 invariant="MySql.Data.MySqlClient"
                 description=".Net Framework Data Provider for MySQL"
                 type="MySql.Data.MySqlClient.MySqlClientFactory, 
                       MySql.Data" />
          </DbProviderFactories>
         </system.data>
      

      在尝试再次添加从数据库生成的 ADO.NET 实体数据模型之前,不要忘记重建解决方案

      【讨论】:

        【解决方案8】:

        首先,重新安装 vs 1.2.3,将以下引用添加到您的项目或检查它的版本:

        MySql.Data.dll

        MySql.Data.Entity.EF6.dll

        MySql.Web.dll

        移除 App.config 或 Web.config 中的默认 entityFramework 标签 重建你的项目,你可以添加ADO.NET实体数据模型

        【讨论】:

          【解决方案9】:

          这对我有用,无需重新安装 Visual Studio 或其他任何东西。

          • 已安装最新的 MySQL Visual Studio 插件和 MySQL 连接器网络
          • 删除 App.config 或 Web.config 中的 entityFramework 标签及其所有子标签。
          • 将其替换为以下代码:
          <entityFramework>
            <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
            <providers>
              <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
              <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
            </providers>
          </entityFramework>
          
          • 添加对项目的 MySql.Data.dll、MySql.Data.Entity.EF6.dll 和 MySql.Web.dll(如果不是 WPF 应用程序)引用。
          • 重建项目,然后添加 ado.net 模型。

          注意:确保只删除 entityFramework 标记及其子标记,并将其替换为上面的片段。如果您删除任何“额外”标签,您的项目可能会遇到更大的问题,就像我一样。 X)

          【讨论】:

            【解决方案10】:

            我使用的是 Visual Studio 2013 社区。想在 MySQL db 上执行 Code First。我遇到了同样的问题“您的项目引用了最新版本的实体框架;...” 解决我的问题的是下面给出的简单步骤。

            1. 添加项目后,使用nuget控制台添加EntityFramework6.1.3,通过install-package EntityFramework
            2. 用户控制台通过 MySQL.Data.Entity 添加 MySQL 引用
            3. 打开您的 Web.config 或 App.config 以更改 entityframework 和 system.data 部分,如下所示

                      <entityFramework>
                      <defaultConnectionFactory  type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"  />
                      <providers>
                          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer" />
                          <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
                      </provider>
                      </providers>
                  </entityFramework>
                  <system.data>
                      <DbProviderFactories>
                          <remove invariant="MySql.Data.MySqlClient" />
                          <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.9.7.0,       Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
                      </DbProviderFactories>
                  </system.data>
              
            4. 此时请确保重新构建项目。 (这是必须的)

            5. 现在添加 ADO 实体模型并选择 MySQL 即可。

            顺便说一下,我使用的插件是 M4VS 1.2.3 和 MySQL .NET Connector 6.9.7

            【讨论】:

              【解决方案11】:

              很简单,我使用 Nuget 来引用 MySQL.dll(等),它自动引用了 .net 4.0 dll。我刚刚将引用更改为 4.5 并且它起作用了。

              【讨论】:

                【解决方案12】:

                在 nuget 命令行中执行

                update-package -reinstall -ignoreDependencies
                

                并重建解决方案 这个工作还是我

                【讨论】:

                  【解决方案13】:

                  我也遇到了同样的问题。幸运的是,我修好了。 MySql.Data.dll 或 MySql.Data.Entity.EF6.dll 与 EF 6.1 up 版本不兼容。我做了什么,我通过这个命令在 nuget 控制台中安装了 EF 版本 6.0.0.0 -> install-package entityframework -version 6.0.0.0 并解决了这个问题。

                  【讨论】:

                    【解决方案14】:

                    我添加了这个为我解决了这个问题:

                     <runtime>
                        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                          <dependentAssembly>
                            <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
                            <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
                          </dependentAssembly>
                        </assemblyBinding>
                      </runtime>
                    

                    【讨论】:

                      【解决方案15】:

                      2018年还有问题……

                      DB-first 场景:对于 Visual Studio 2017 社区版,我找到了可行的组合:

                      • 适用于 Visual Studio 1.2.8 的 MySQL
                      • MySQL 连接器 .NET 6.9.9
                      • EntityFramework 5.0.0(我尝试了 v6.x 的不同组合,但没有成功)

                      我可以使用官方文档运行的 Code-First 场景 https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html 使用最新的连接器 v.8.0.11 和 EF6。

                      【讨论】:

                        猜你喜欢
                        • 2016-10-07
                        • 2014-04-03
                        • 2014-01-26
                        • 1970-01-01
                        • 2014-11-24
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多