Visual Studio 2013 中带有 EF6 的 MySQL 连接器

Posted

技术标签:

【中文标题】Visual Studio 2013 中带有 EF6 的 MySQL 连接器【英文标题】:MySQL Connector with EF6 in Visual Studio 2013 【发布时间】: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。不过谢谢! :) 【参考方案1】:

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

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

我在这里注意到的是他有两个额外的包,你没有提到“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。我遇到了同样的问题“您的项目引用了最新版本的实体框架;...” 解决我的问题的是下面给出的简单步骤。

    添加项目后,使用nuget控制台添加EntityFramework6.1.3,通过install-package EntityFramework 用户控制台通过 MySQL.Data.Entity 添加 MySQL 引用

    打开您的 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>
    

    此时请确保重新构建项目。 (这是必须的)

    现在添加 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。

【讨论】:

以上是关于Visual Studio 2013 中带有 EF6 的 MySQL 连接器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQLite 和 Visual Studio 2013 中使用 EF

在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器

visual studio 2013 error: Page '312e8a59-2712-48a1-863e-0ef4e67961fc' not found.

Visual Studio 2010 中带有 plsql 的 C# [关闭]

Visual Studio 中带有 ASP.NET Web API 项目的 Angular 项目

Visual Studio代码launch.json runtimeArgs在参数中带有双引号