无法创建实体数据模型 - 使用MySql和EF6

28

我正在尝试在Visual Studio 2013的C#/ Web项目中添加edmx实体模型。 我的问题是没有创建文件。

我按照以下步骤操作:

  1. 给项目命名
  2. 选择 'EF Designer from database'
  3. 从下拉菜单中选择连接(localhost),已经成功连接到MySQL数据库
  4. 选中 "Save connection settings in webc.config as" 选项
  5. 我点击'下一步',然后窗口消失,回到代码窗口

没有创建edmx文件。 (尽管对于SQL Server有效,但对于MySQL无效)

我已经安装了 Entity Framework 6.1.2MySql.DataMySql.Data.EntitiesMySql.Data.EntityMySql.Web -- 全部都已安装。

在尝试添加实体模型文件之前,我还重建了项目。

我安装了最新的MySQL包和最新的.NET连接器

运行环境:Windows 7上的Visual Studio 2013。

有什么解决方法吗?


有没有可能文件已经被创建但没有自动包含在解决方案中? - Yasir
@Yasir 是的,它在那里。我尝试从设计师(图表)中再次“从数据库更新模型”,但它只是关闭窗口而没有做任何事情。 - Liron Harel
1
你能附上你的解决方案资源管理器和文件夹结构的截图吗?接下来,如果你看到edmx文件已经打开,请关闭它,右键点击并使用XML编辑器打开。搜索单词“error”和“exception”,并发布你找到的内容。 - Yasir
我有完全相同的问题。你找到解决方案了吗?请告诉我。 - DR.
Core的解决方法在这里 https://stackoverflow.com/a/58324837/7149454 - Nick Kovalsky
13个回答

81

我在尝试将Visual Studio Professional 2017环境配置为MySQL、ADO.NET(Database First)和EF6时,遇到了相同的情况。

注意:请按照给定的步骤进行操作。

  1. 如果已安装,请卸载/删除“Connector/NET”和“MySQL for Visual Studio”。

  2. 安装“MySQL for Visual Studio”v2.0.5 CTP (MySQL for Visual Studio)。 注意:在安装Connector/NET之前安装MySQL for Visual Studio。

  3. 安装“Connector/NET”v6.9.10 (Connector/Net)。 https://istack.dev59.com/XOT1I.webp 注意:我先使用了Connector/NET v6.8、v6.10和v8,但是它们都无法与Visual Studio 2017和ADO.Net一起使用。在这里,您可以找到所有Connector版本以及与Visual Studio IDE的兼容性,但是到目前为止,这个列表不准确。

  4. 创建新的Visual Studio Professional 2017项目。

  5. 通过NuGet下载并安装“EntityFramework”v6.2.0,方法是转到Project Tab/Manage NuGet Packages/Browse-> Entity Framework。

  6. 通过在解决方案资源管理器中右键单击引用并选择Add Reference/Browse->Browse按钮,将引用添加到C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dllC:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll

  7. 在App.config中的实体框架提供程序下添加MySQL EF6提供程序信息,如下所示:

<entityFramework>
       <providers>
         <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
       </providers>
</entityFramework>
  1. 通过进入Build选项卡/Rebuild ProjectName来重新构建项目。

就是这样。VS2017已经准备好了。希望对于每个人都有效果,就像今天对我一样。

参考文献:

  1. 无法创建实体数据模型-使用MySql和EF6

  2. 未找到'MySql.Data.MySqlClient' ADO.NET提供程序的Entity Framework提供程序


7
这应该成为被接受的答案。文档很完整,详细地解释了所有内容。解决了我的问题。我知道这是在“被接受的答案”之后添加的,但现在应该将其替换。谢谢! - Boyd P
谢谢。我按照您的步骤操作,现在一切都很顺利。 - Ali
我在使用VS 2017的时候遇到了同样的问题。但是方法对我起了很好的作用!非常感谢。 - Nate
1
这绝对可行!我很惊讶并且暂时非常高兴。然而,作为程序员,我们不得不在使用软件功能时动手脏活,这一点有些悲哀。关于第六步,我进行了一些不同的操作,因为我不想浏览。我只是在“引用管理器”表单的搜索框中输入了“MySql”,然后那两个所需的程序集就被选定了。 - Bradley
我使用了这个,我的 Visual Studio 部分终于可以工作了!但是由于某些原因,我的 MySQL 控制台一直崩溃。重新安装了 MySQL 5.7 版本,问题得到了解决。 - user13387119
显示剩余6条评论

14

我通过以下步骤解决了这个问题:

  1. 通过在包管理器控制台中使用以下命令从Nuget卸载MySql.Data.EntitiesUninstall-Package MySql.Data.Entities

  2. 从你的Mysql连接器安装路径(位于C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5)中添加项目引用到最新的MySql.Data.Entity.EF6.dll 文件。


1
谢谢你的提示。对我有用。我不明白的是,如果NuGet不起作用,为什么还要有它... - katesky8
1
我通过安装相同版本的MySql.Data和MySql.Data.Entity解决了这个问题。 - Khizar Iqbal
对我来说有效,但必须卸载并重新安装Connector/Net。 - pistipanko

12

VS 2015仍然存在这个bug。 它是由版本不匹配引起的。

在我的系统上,我使用的是MySQL Connector 6.9.6。
在NuGet Package Manger控制台中发出命令:

Install-Package MySql.Data.Entity

默认情况下安装6.9.8版本。 您的连接器必须与NuGet软件包的实际版本匹配。
您可以从以下链接下载更新版本的连接器: https://www.mysql.com/products/connector/

在此处选择“MySQL的Ado.net驱动程序”,并下载相应版本(在本例中为6.9.8)。 重新打开Visual Studio,现在向导不会崩溃。 无需重新启动电脑。


下载连接如果过期,会导致我的问题无法解决。 - AndrewK
这个解决方案对我来说在使用VS2015和连接器6.9.9时有效。SO上的其他建议在我的设置中没有起作用。已点赞。 - Yogi
遇到了向导失败的相同问题,但是安装的是正确的版本。不得不卸载连接器并重新安装,一切正常。修复无效。 - PodTech.io
工作成功!这是链接 https://dev.mysql.com/downloads/connector/net/6.9.html - frhack

5
这是针对一个没有app.config文件的ASP.NET MVC应用程序。 我不会重述失败的尝试,但对我有效的方法如下:
  • 在VS未运行的情况下,下载并安装“MySQL for Visual Studio 2.0.5”——本文撰写时的最新版本。
  • 启动VS2017,并卸载之前在VS2017中安装的“MySql.Data.Entity”和“MySql.Data”NuGet包。
  • 使用上述链接下载并安装最新的MySql connector/NET(本文撰写时为8.0.13版本)。
  • 在您的项目中添加对“MySql.Data.dll”和“MySql.Data.EntityFramework.dll”的引用,如Lopez93所述,但请注意8.0.13中不存在“MySql.Data.Entity.EF6.dll”,只有“MySql.Data.EntityFramework.dll”。
  • 现在编辑web.config文件,并确保在<providers>部分中有以下行:

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework">

  • 删除或注释掉任何其他“<provider invariantName="MySql.Data.MySqlClient"...”行。

  • 重新构建项目。

再次尝试使用向导。

对我来说这行得通。

祝你好运!


这个解决了我的问题(使用MySql.Data v 8.0.15),在entityFramework部分检查提供程序。这真是太棒了,我已经花了2天时间在这上面工作了,估计我已经尝试了所有的旧建议,差点放弃了。 - Chris Schaller

4
从其他答案中获取有关NuGet版本控制的建议。我通过删除Nuget安装的.DataData.Entity.EF6来解决此问题。
然后右键单击引用并浏览以下文件:C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5\MySql.Data.dllC:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5\MySql.Data.Entity.EF6.dll 然后,我能够使用.edmx模型完成ADO.Net向导。

4
我通过以下步骤解决了这个问题:
  1. 打开MySQL安装程序并安装最新版本的Connector/NET
  2. 卸载/重新安装与新安装的Connector/NET包版本匹配的最新版本MySQL.Data.*软件包
  3. 重启Visual Studios
  4. 重新构建解决方案

3
我在将 MySql 的版本从 6 升级到 8.0.17.0 时遇到了问题。我尝试了所有旧的方法,但花了将近两天时间才找到了this article。 如果你正在使用 EF6 和 MySql 版本 8.0.?,根据这篇文章: MySql.Data.Entity 6.10.7 与 MySql.Data 8.0.11 不兼容。
Oracle 将包重命名为 MySql.Data.EntityFramework,用于 v8.x 版本。您需要卸载 MySql.Data.Entity 并安装 MySql.Data.EntityFramework。 一旦我完成这个简单的步骤,数据连接就开始工作了,EDMX 设计器也开始工作了(虽然我不得不回到 2017 年的 Visual Studio,因为 Designer Tools for VS 2019 在此帖子发布时还不可用)。 希望这篇更新的文章能帮助你们中的一些人。

3
我知道解决方法。
Nuget会安装MySql.Data.*的最新版本,而您可能有先前版本的连接器(在我的情况下,包是v. 6.9.6,连接器是6.9.5)。这导致了版本不匹配的问题。
请注意,如果您在NuGet中使用Install-Package MySql.Data.Entities,则会获得更旧的版本,如6.8.3,因此您必须自己添加引用并注意您尝试添加到解决方案的哪个版本。

我已经尝试了各种组合,但仍然无法正常工作。系统尝试并显示了所有正确的对话框,但仍未创建模型。我只能自己动手,虽然不是很好,但因为没有更多时间可以投入到这个问题上,所以只能这样做。 - djack109

2
我遇到了同样的问题,使用的是MySQL Connector 6.9.8.0版本。虽然所有版本都匹配,但仍然失败了。在安装MySQL连接器之后,我安装了Visual Studio的新版本(从2010升级到2013)。对我来说,解决方案是卸载MySQL Connector for NET,然后重新安装(完全相同的版本)。然后重新启动Visual Studio。
看起来这是同一个问题的另一个版本。

1
你可以采用以下解决方案:
  1. 添加一个新的空EF模型。
  2. 在emdx设计中右键单击并从数据库更新模型。
  3. 选择你的数据库,模型将被生成。
这对我有用 :)

1
对我来说不起作用,下面的解决方案也是一样。向导弹出但是什么都没发生。 - djack109

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接