无法将 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.Data
、mysql.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¬ify=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.Data
和 MySql.Data.Entity
和 EntityFramework
的 Nuget 引用。由于MySql.Data
和EntityFramework
被代码直接使用,构建过程非常智能,可以将它们复制到输出文件夹,并在第二次将其复制到GUI 项目的输出文件夹中。
但是,由于MySql.Data.Entity
只被app.config
或web.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.dllMySql.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的主要内容,如果未能解决你的问题,请参考以下文章