无法将 MySQL 连接用于实体框架 6

Posted

技术标签:

【中文标题】无法将 MySQL 连接用于实体框架 6【英文标题】:Can't use a MySQL connection for entity framework 6 【发布时间】:2014-02-07 23:32:26 【问题描述】:

我正在尝试将实体框架 6 与 mysql 一起使用。

我确实为 Visual Studio 1.1.1 和 MySQL .Net 连接器 6.8.3 安装了 MySQL 插件。

问题是当我尝试创建新的 ADO.NET 实体模型时,我无法选择 MySQL 进行连接。

但如果我从 Visual Studio 中的连接工具创建连接,我可以看到 MySQL

表示当前安装的版本与实体框架6不兼容。我安装了最新的连接器和插件后怎么可能。还有什么事情要做吗?

谢谢

编辑

我在没有安装默认连接器的情况下重新安装了 MySQL,然后我安装了 6.8.3 和 Visual Studio 插件。

然后我可以看到我为我的实体模型建立的连接,但是当我要选择实体版本时,我收到了这条消息。

【问题讨论】:

【参考方案1】:

我知道我迟到了。但我在 Visual Studio 2019 中遇到了同样的问题。我尝试安装 MySql 连接器以及 Visual Studio 的 MySql,但没有成功。

对我有用的是

    我安装了MySql for Visual Studio 2.0.5版的开发版。 (如果您使用我提到的上述链接,请不要忘记点击开发版本) 我安装了以下 nuget 包 MySql.Data.EntityFramework,它通常会安装许多其他包,包括 MySql.Datamysql.sata.entity.EF6 等。 我安装了Connector/NET 8.0.26

我正在将 Visual Studio 2019 和 EF6 与 Windows 窗体应用程序一起使用。 连接器/NET 8.0.26

【讨论】:

【参考方案2】:

2017 年解决方案

安装 Nuget 包:

Install-Package EntityFramework
Install-Package MySql.Data.Entity -Version 6.9.9

为 Visual Studio 1.2.6 安装 MySQL - https://dev.mysql.com/downloads/windows/visualstudio/

Web.Config 的变化

<EntityFramework>

到:

<EntityFramework codeConfigurationType = "MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

添加(**您的信息**):

<connectionStrings>
<add name="**YourContextName**" connectionString="server=**xxx.xxx.xxx.xxx**;port=3306;user id=**your user**;password=**your password**;database=**your database**" providerName="MySql.Data.MySqlClient" /></connectionStrings>
**重新启动 Visual Studio**

我的设置: - Microsoft Visual Studio 社区 2015 - 点网框架 4.5.2 - Asp.Net MVC 5.2.3.0 - MySql 服务器 5.6

【讨论】:

我正在使用 Visual Studio 2017 Enterprise 15.4.2 ,并且 MySQL for Visual Studio 安装(使用 MySQL 安装程序或独立安装程序)失败。我尝试执行此解决方法 ==> bugs.mysql.com/bug.php?id=85908&thanks=3&notify=195 但 VS 的 MySQL 安装仍回滚到 90%。请帮忙,自从 3 天以来,我一直在努力从我的数据库中更新我的模型:/ 我做了这个评论中描述的每一个步骤,但没有任何改变。当我在新的连接窗口上单击“从数据库更新模型”时,没有显示 MySQL 数据库选项。 @Chris 请帮忙?【参考方案3】:

我也面临同样的问题。

我做了以下事情: 1. 从以下位置安装 MySQL for Visual Studio: https://dev.mysql.com/downloads/windows/visualstudio/ 2.在我的项目中安装MySql.Data 3.在我的项目中安装MySql.Data.EntityFramework

【讨论】:

【参考方案4】:

仅供使用多项目解决方案的所有人参考,如果您因查找/加载 MySql EF6 提供程序的问题而无法运行 GUI 项目,例如:

找不到具有不变名称“MySql.Data.(...)”的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。请参阅http://go.microsoft.com/fwlink/?LinkId=260882 了解更多信息。

请看this question。

虽然它与 SqlServer 有关,但问题可能是相同的:如果您的项目中只有一个处理 DB 操作,那么很可能您向该项目添加了对 MySql.DataMySql.Data.EntityEntityFramework 的 Nuget 引用。由于MySql.DataEntityFramework 被代码直接使用,构建过程非常智能,可以将它们复制到输出文件夹,并在第二次将其复制到GUI 项目的输出文件夹中。

但是,由于MySql.Data.Entity只被app.configweb.config文本文件引用,构建过程认为不需要这个引用(代码 strong> 不使用它!)并将其剥离,您将不会在 GUI 项目输出目录中看到 MySql.Data.Entity.EF6.dll,这会导致 GUI 项目无法找到该提供程序。

所以 - 两个选项 - 确保在构建过程中复制该 DLL(即构建前/后构建事件、部署包构建器、CI 任务、人工任务等),或者直接引用在您的 DB/EF6 项目中组装。

【讨论】:

【参考方案5】:

我在mySQL Bucktracker 上找到了这个

尝试以下解决方法....

在 MySQL 数据库上运行以下命令,然后尝试是否可行。

设置全局 optimizer_switch='derived_merge=off'

我还添加了以下程序集:

EF6 作为 Nuget 包 MySQL.Data MySql.Data.Entity.EF6.dll MySQL.Web(不确定是否真的需要)

【讨论】:

【参考方案6】:

最新编辑

错误已修复。

克里斯的评论:

2015-11-07,您现在无需编辑任何内容即可完成所有工作 文件或做奇怪的事情。使用 MySQL for Windows 安装程序和 包括 Visual Studio 支持和最新的 Connector.Net。是 安装后一定要更新,你会得到每个最新的 (1.2.5 和 6.9.8)。使用 NuGet 安装 EntityFramework、MySql.Data、 和 MySql.Data.Entity。最后,构建并享受代码优先反向 通过添加 Ado.Net 实体模型来工程善。

原答案

我发现这是 MySQL 的一个错误。

Here's 解释解决方法的链接。

在您安装了 VS 2013 的机器上,VS 插件 (1.1.3 GA) 和 连接器/网络

在执行这些步骤之前关闭所有 VS 实例。

在 Windows 资源管理器窗口中,转到此路径或您安装的任何位置 你的连接器/网络二进制文件

C:\Program Files (x86)\MySQL\MySQL 连接器网络 6.8.3\Assemblies\v4.5\

复制文件:

MySql.Data.Entity.EF6.dll

然后粘贴到这个文件夹中

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies

如果它要求您覆盖它,请这样做。

您需要管理员权限才能覆盖该文件。

然后您可以再次尝试为您的模型生成脚本。

重要的是你有 1.1.3 版本的 VS 插件 安装,因为此解决方法就是为此。

不幸的是,它对我不起作用,所以我降级到实体框架 5,直到他们解决这个问题。

编辑

终于,它现在可以工作了。

我必须添加以下 3 个 DLL:

C:\Program Files (x86)\MySQL\MySQL 连接器网络 6.8.3\Assemblies\v4.5\MySql.Data.dll C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5\MySql.Data.Entity.EF6.dll C:\Program Files (x86)\MySQL\MySQL 连接器网络 6.8.3\Assemblies\v4.5\MySql.Web.dll

然后我将网络配置中的 EntityFramework 部分更改为:

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    </providers>
  </entityFramework>

别忘了REBUILD,你应该可以使用 MySQL 创建实体框架 6 模型。

重要

确保您已安装 MySQL for Visual Studio 1.1.3 和 MySQL connector .net 6.8.3

【讨论】:

我遇到了同样的问题,我一步一步按照你的回答,现在可以了。 我还需要 NuGet MySql.ConnectorNET.Entity(版本 6.8.3.2)才能正常工作。 谢谢,这正是我所需要的。一个笔记认为,我刚刚下载了forums.mysql.com/read.php?174,601264,601264 中提到的最新版本,VS 插件的版本是 1.1.1,连接器的版本是 6.9.5。我可以验证这些版本也需要这些步骤。 2015-11-07,您现在无需编辑任何文件或做奇怪的事情就可以让它全部工作。使用 MySQL for Windows 安装程序并包含 Visual Studio 支持和最新的 Connector.Net。请务必在安装后进行更新,您将获得最新的(1.2.5 和 6.9.8)。使用 NuGet 安装 EntityFramework、MySql.Data 和 MySql.Data.Entity。最后,通过添加 Ado.Net 实体模型构建并享受代码优先的逆向工程。 几天的搜索和尝试,这终于帮助了我......谢谢【参考方案7】:

2015-11-07 更新

这些错误已修复,您现在无需编辑任何文件,甚至无需引用 NuGet 之外的程序集即可使其全部运行。您只需安装正确的东西并添加正确的 NuGet 包。方法如下:

使用 MySQL for Windows 安装程序并包含 Visual Studio 支持和最新的 Connector.Net。请务必在安装后进行更新,您将获得最新的(1.2.5 和 6.9.8)。

然后,使用 NuGet 安装 EntityFramework、MySql.Data 和 MySql.Data.Entity。

最后,通过添加 Ado.Net 实体模型来构建并享受代码优先逆向工程。

【讨论】:

【参考方案8】:

对我来说,重新安装 MySQL 并使用已安装的连接器版本作为 Visual Studio 中的参考工作!

步骤:

    使用适用于 Windows 的最新稳定 MySQL 连接器重新安装 MySQL 工具。

    在 Visual Studio 中添加这 3 个文件作为参考:

    MySql.Data.dll

    MySql.Data.Entity.EF6.dll

    MySql.Web.dll

    修改以下Web.config
      <providers>
        <provider invariantName="System.Data.SqlClient"  type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
     </providers>
    

收件人:

 <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" />
</providers>

确保您的连接用户名/密码/数据库名称正确,否则 Visual Studio 可能会崩溃。 (发生在我身上。)

【讨论】:

【参考方案9】:

不知道这对你们来说是否仍然是个问题,伙计们,但上述解决方案都不适合我......直到我发现这个:

http://www.microsoft.com/en-us/download/details.aspx?id=40762

在应用补丁后(适用于 VS2013 和 VS2012),我让 VS2013 与 EF6 for MySql 完美配合。

ps。安装的软件包版本(来自 NuGet): EntityFramework - 6.1.3 (03/10/2015) MySqlData - 6.9.6 (02/24/2015) MySql.Data.Entity - 6.9.6 (02/24/2015) MySql.Web - 6.9.6 (02/24/2015)

NuGet 正确地完成了这项工作并相应地更新了 Web.Config,在“entityFramework”部分填充了所需的任何内容。

对于 VS2013,它只是从“根本不工作”变为“功能齐全”。 对于VS2012,它可以使用“数据库中的代码优先”,这在应用补丁之前是不可用的。

我希望我在大约 10 天前就找到了这个,所以希望这仍然可以提供一些帮助。

【讨论】:

这就像一个魅力......非常感谢!自 3 小时以来一直在努力让它工作...... 为了发布我的源代码,我需要做一些特别的事情吗?或者我可以去做一个简单的出版吗?未来的客户端机器会正确还是我需要在那里应用一些补丁?【参考方案10】:

您是否尝试为我的 sql 安装最新的 dot net 连接器? http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html 要么 http://dev.mysql.com/downloads/connector/net/ 取决于你的上下文。

【讨论】:

以上是关于无法将 MySQL 连接用于实体框架 6的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 MySQL DbContext 无法连接

无法将实体框架与 MySQL 一起使用

无法让实体框架连接

MySQL 实体框架:无法创建索引

带有 MySQL 连接器 6.4.3 的实体框架 4 自动生成表导致“列长度”异常

.net Core 的实体框架 6。在 Blazor 服务器端