Entity Framework 的实体数据向导在连接 MySQL 数据库时崩溃

Posted

技术标签:

【中文标题】Entity Framework 的实体数据向导在连接 MySQL 数据库时崩溃【英文标题】:Entity Framework's Entity Data Wizard Crashes When Connecting to MySQL Database 【发布时间】:2016-12-30 19:21:54 【问题描述】:

我正在尝试使用向导创建实体数据模型,以对现有 mysql 数据库进行逆向工程。我进入向导的“选择您的数据连接”页面,选择现有的 MySQL 连接并单击“下一步”,向导崩溃。具体来说,对话框只是消失,没有错误消息或任何痕迹。每一次。重新启动 VS 或 Windows 没有任何作用。

我可以使用服务器资源管理器和相同的连接毫无问题地连接到数据库,所以我相当确信这不是连接问题。

这是在 Visual Studio 2015 中安装的所有更新、1.2.6 版 MySQL for Visual Studio、EF 6.1.3 以及 MySql.Data 和 MySql.Data.Entity.EF6 版本 6.8.3.0。它是一个针对 .NET Framework 4.6.1 的控制台应用程序。

Google 尚未透露任何有用的信息。昨天的另一个question here 与此类似,但在不同的点崩溃并且该用户无法使用服务器资源管理器进行连接。所以这似乎是一种不同的情况。

Windows 日志中没有任何帮助。

我该如何解决这个问题?

【问题讨论】:

我刚刚在另一台类似配置的 Windows 10 机器上试过这个。同样的事情也会发生:向导在尝试与数据库建立连接时会关闭。 我知道这是 VS2015 和 Connector/NET 6.8.3.0,但想与最新最好的 VS2017 社区和 Connector/NET 8.0.11.0 分享我的经验。基本上这是一个悲惨的失败,ADO.net 数据模型向导在各个地方崩溃,没有错误消息。卸载并恢复到 Connector/NET 6.10.7(跳转到 8 之前的最后一个)修复了它。 【参考方案1】:

是版本不匹配造成的。

在我的系统上,我有 MySQL 连接器 6.9.6。 在 NuGet 包管理器控制台中发出命令:

安装包MySql.Data.Entity 默认安装版本 6.9.8。您的连接器必须与 NuGet 包的实际版本匹配。 您可以从以下位置下载连接器的更新版本:https://www.mysql.com/products/connector/

这里选择“Ado.net driver for MySQL”,下载对应版本(本例为6.9.8)。重新打开 Visual Studio,现在向导不会崩溃。无需重启。

【讨论】:

谢谢!但是我的项目安装了 MySql.Data 和 MySql.Data.Entity 版本 6.9.9。而且我已经有了 6.9.9 版的 Connector/Net。我下载了一个新副本并进行了修复,但没有效果。但我决定卸载 Connector/Net 并重新安装它。那确实成功了……有点。我现在进入向导的 NEXT 页面,在这里我选择我的 EF 版本--progress!即使我使用的是最新版本,它也有关于没有兼容版本的 EF 的错误消息。所以至少这是一个新问题,所以我会继续解决这个问题。 这对我有用。有Connector 6.8.8,但版本6.9.9MySql.DataMySql.Data.Entity。将 NuGet 包回滚到 6.8.8 让一切正常。谢谢! h此答案应标记为正确答案!谢谢! 如果您仍然遇到此问题,请查看我的解决方案:) 简而言之:使用 MySql.Data.EntityFramework,而不是 Mysql.Data.Entity Not working in 2019 VS..相同版本在选择数据库连接后仍然向导崩溃并且没有显示错误【参考方案2】:

我今天遇到了这个问题,这里的提示是“版本不匹配”是完全正确的!

我的重要“发现”是他们重命名了您需要 EF6 的包! 正如这里的许多人所发现的(例如“Nofi”),降级以匹配版本可以解决问题。但是,不要降级新版本,而是将 Mysql.Data.Entity 包换成更新的 MySql.Data.EntityFramework! :)

简短:使用 MySql.Data.EntityFramework,而不是 Mysql.Data.Entity

【讨论】:

这是正确答案——oracle提供的文档是错误的。【参考方案3】:

我遇到了同样的问题,因为我使用的是 Mysql connector v 8.0.12MySql.Data v8.0.12Mysql.Data.Entity v6.10.8.

程序由于兼容性问题而崩溃。对我有用的是我安装了所有三个相同的版本

Mysql 连接器 v 6.10.8MySql.Data v6.10.8Mysql.Data.Entity v6.10.8

【讨论】:

感谢您的明确回答,在 VS2015 上为我工作。【参考方案4】:

纯粹出于运气和机会,我遇到了同样的错误。 我也将 VS 2015 与 Entity Framework 6 一起使用。当我尝试使用 EF 逆向工程现有连接从数据库创建模型时,也发生了错误。

问题是,即使数据连接存在,并且您可以刷新它,连接也会以某种方式断开。转到左侧的 Server Explorer 面板,然后在 Data Connections 下找到您现有的连接,而不是使用 refresh 检查它,而是右键单击并选择修改连接

从这里尝试测试连接并按 OK。你应该得到一个错误(对我来说它说'无法连接到任何指定的 MySQL 主机。')

【讨论】:

谢谢!但是,唉,那没有用。 “修改连接”对话框中的测试连接已成功连接,但向导仍然死在同一位置。 @RiverRunner 和这里一样,只是关闭窗口,没有错误。 自从我回答这个问题以来,我想我有一个更好的解决方案。回归基础:重新安装“mysql for VS”(同时确保您的版本正确)并确保引用了 dll(我认为有 2-3 个),还必须正确设置 app.config。如果您遇到问题,@IdanShechter 创建一个新问题,如果可以,我会尽力回答。【参考方案5】:

VS2017 和最新的 MySQL 连接器 (6.10.6) 一直在发生这种情况。将连接器和 Nuget 包降级到 6.9.11 即可。

【讨论】:

问题特别提到了 Visual Studio 2015 最新的 6.10.6 和 Visual Studio 2017 也发生在我身上 确认它可以降级到 6.9.11。我还必须将实体框架从 6.2 降级到 6.1.3,以使 6.9.11 与 EF 兼容。 8.0.11 版仍然会发生,将使用 MySql 提出问题报告并在此处发布链接... 这里有新的错误报告。 bugs.mysql.com/bug.php?id=91201&thanks=4 没有日志,甚至没有详细的描述性和指导性错误消息,这真是不合情理。 :(【参考方案6】:

正如我对 Lars Meldgård 的评论,卸载并重新安装 6.9.9 版的 Connector/Net 让我在向导中更进一步。所以我会认为这是一场胜利。但我真的很困惑为什么这会奏效。我在两台不同的计算机上遇到问题,我的主要台式机和笔记本电脑。 Windows 10 中的类似配置,所有内容都是最新的,所以都损坏了吗?不太可能。

所以现在问题出在向导的“选择您的版本”页面上,我收到以下错误。但这是一个不同的问题,我将在接下来解决这个问题。

New error on next page of wizard

【讨论】:

确保您在更新 EF 版本后重建了您的应用程序。即使您还没有任何代码,您也需要重新构建向导才能正常工作。【参考方案7】:

我是编程/.Net 开发的新手。当我尝试从 MySql 数据库生成实体模型时,我遇到了同样的问题,窗口消失了。

我尝试了 Nuget 包和连接器的匹配版本,但仍然不满意。我为使其正常工作所做的工作如下:

我删除然后重新创建了项目(幸运的是它是一个新项目) -然后从数据库中生成模型 然后我安装了 Nuget 包以匹配我的连接器版本。

我正在使用 VS 2017 社区版, 连接器 V6.9.9, Nuget 包 V6.8.8

希望这对某人有所帮助。

【讨论】:

【参考方案8】:

由于 MySql.Data.Enetity 的最高版本是 v6.10.8,我可以通过 nuget 找到,我已经下载了“mysql-connector-net-6.10.8.msi”,所以我将 MySql.Data 降级为 v。 6.10.8,那确实是骗人的!

【讨论】:

【参考方案9】:

对于那些在 Visual Studio 2019 社区中苦苦挣扎的人,我应用了dev.mysql.com. 提供的解决方案 以下配置对我有用:

MySQL 安装程序:

MySQL 服务器 8.0.14 MySQL Workbench 8.0.14 [可能可选] 适用于 Visual Studio 1.2.9 的 MySQL MySQL Shell 8.0.14 [可能可选] 连接器/NET 6.10.8

NuGet 包:

EntityFramework v6.4.4 MySql.Data v8.0.14 MySql.Data.EntityFramework v8.0.14

注意:粗体中的项目必须具有完全相同的版本。

运行安装后,Visual Studio 提示更新其中一个连接器。应用更新后(该位只需几分钟),系统就可以工作了。

【讨论】:

【参考方案10】:

我正在分享我终于解决的问题,因为这是一个真正令人头疼的问题。

我在 Table Role 中的 Role ID 列最初在 SQL 中设置为 number(38,0) 并以这种方式创建,然后更改为 NUMBER(10,0) 并对其进行了更改。 经过几天的尝试解决这个问题,我终于右键单击服务器连接中的表,然后单击设计器。我的一个表:角色,有一个列 ID - 类型编号(10,0)。它作为 RoleID 链接到表 USER。检查表 USER 中的 RoleID 后,在设计器中它显示为 Number(38,0) 。 因此,请一一检查您的外键...这是我的问题,花了我 3 天的时间才最终解决。我的 EF 对话框也消失了,或者在 EDMX 文件中没有表格。

【讨论】:

【参考方案11】:
<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.EntityFramework, Version=8.0.16.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>

我将 MySql.Data.EntityFramework 的版本更改为 8.0.16,因为我的连接器 8.0.16 和问题已经消失。这对我有用

【讨论】:

【参考方案12】:

不匹配似乎在 MySQL 连接器网络的确切版本上。我在开发和生产中使用“MySQL Connector Net 8.0.13”有很多项目,但还不能全面升级。当前的 NuGet 包是“MySQL Connector Net 8.0.15”。我必须同时卸载“MySql.Data.EntityFramework 8.0.15”和“MySql.Data 8.0.15”,然后强制安装命令行的版本与我在开发和生产中运行的 MySQL 连接器网络的当前版本相匹配:

PM> Install-Package MySql.Data -Version 8.0.13
PM> Install-Package MySql.Data.EntityFramework -Version 8.0.13

【讨论】:

【参考方案13】:

在 Visual Studio 2019 中使用 EntityFramework 安装 MySQL 8.0 服务器 安装 MySQL 服务器 8.0.16

安装完整的 MySQL Connector.Net x86 8.0.16

安装此自定义重新打包的 VSIX MySQL Visual Studio

如果在安装 MySQL Visual Studio 插件后显示无法执行 comamnd devenv /updateconfiguration 的警告,请在 Visual Studio 20xx 的开发人员命令提示中手动执行该命令,并以管理员身份运行。

在 Visual Studio Nuget 包管理器控制台中运行此命令 Install-Package EntityFramework

管理 Nuget 包 > 搜索 Mysql > 安装 Mysql.Data v8.0.16

管理 Nuget 包 > 搜索 Mysql > 安装 Mysql.Data.Entity v6.10.8

管理 Nuget 包 > 搜索 Mysql.Data.EntityFramework > 安装 Mysql.Data.EntityFramework v8.0.16

如果在 Web.config 中的标记后未自动添加此行并重建解决方案,请添加此行 提供者>--> 即使执行上述所有过程也会出现一些错误,然后尝试卸载上面添加的所有 nuget 包和 UnInstall-Package EntityFramework 卸载 Visual Studio 插件和连接器网络。然后重建新项目,仅添加 Install-Package EntityFramework,然后仅添加对 EF6 的 Mysql.Data 和 Mysql.Data.EntityFramework 引用,然后如上所述在 web.config 中添加提供程序 xml,并删除和标记之间的空格,然后重新构建项目,最后尝试添加模型。

此过程经过测试,适用于 Visual Studio 2019 上的 .Net Framework 4.7.2

【讨论】:

【参考方案14】:

我终于通过将文件夹 c:\users\myusername\appdata\roaming\microsoft\visualstudio\10.0 重命名为“10.0 old”来解决此问题

【讨论】:

以上是关于Entity Framework 的实体数据向导在连接 MySQL 数据库时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Entity Framework 中强制沿导航关系进行完整加载?

如何让 Visual Studio 发布 Web 向导相信我的数据库是 Entity Framework CodeFirst?

Entity Framework Core 删除包含已读取实体的实体

实体未使用 Entity Framework 6 在数据库中更新

Entity Framework学习-实体框架中的code-first迁移

加载实体时,Entity Framework 会生成多少个数据副本?