VS 2017中的MySQL和MVCentity framework不起作用

我正在尝试启动MVC EF Visual Studio 2017项目。 我的数据连接都在我的本地实例上设置了MySQL,但是当我创建一个ADO.net数据模型时,我得到了图片中看到的错误:

在此处输入图像描述

这里还有另一篇文章: 不能使用MySQL连接来覆盖VS 2012和2013而不是2017年的entity framework6.以下是MySQL文档,其中说明了2017版本的哪些版本: https : //dev.mysql.com/ DOC /视觉工作室/ EN /视觉工作室的Install.html

我在用:

MySQL Connector Net 6.9.9 | MySQL for Visual Studio 1.2.7 | MySQL服务器5.7

MySQL.Data 6.9.9 | MySQL.Data.Entity 6.9.9 | entity framework6.1.3

所有这些都列在MySQL测试和工作。 我今天刚刚安装了所有新产品,所以没有出色的旧版本。 我三重检查;)

连接字符串:


编辑

我发现这篇文章https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html谈到了建立连接但现在而不是那个错误,对话框就消失了一打到’下一步’。


这只是我做错了什么或MySQL连接器坏了吗?

提前感谢您的任何建议!

所以我最终做的是创建了一个新项目并完成了MySQL.Data 6.9.9的干净安装 MySQL.Data.Entity 6.9.9 | entity framework6.1.3然后再次尝试制作数据模型。

它几乎奏效了! 我得到一个错误说: 'System.Data.StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull. ---> System.InvalidCastException: Specified cast is not valid. 'System.Data.StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull. ---> System.InvalidCastException: Specified cast is not valid. 但是很多人通过进入MySQL命令行并执行: set global optimizer_switch='derived_merge=off'来解决这个问题你可以在这里找到这个bug: https : set global optimizer_switch='derived_merge=off' = 79163

无论出于何种原因, 这是我的命令行的输出,以帮助MySQL的任何新手:

在此处输入图像描述

这解决了一切! 希望有人发现这不会像我一样浪费太多时间。

我要做的是为Visual Studio 2.0.5重新安装MySQL ,然后完全删除并安装MySQL Connector 6.9.9 。 似乎订单确实很重要。 之后,我完全删除了这些包,并按照这个确切的顺序重新安装:

(之后重启Visual Studio)

 EntityFramework 6.1.3 (I tried earlier versions and they don't work, so beware) Mysql.Data 6.9.9 Mysql.Data.Entity 6.9.9 (NOT Mysql.Data.Entities!!! [for 6.9.9]) Mysql.Web 6.9.9 

然后,确保web.config文件中包含以下内容:

(编辑后重启以确定)

       

(您可能需要注释掉任何现有部分并将其替换为此部分)

最后一步我不得不通过重访来提醒自己。 这部分是我忘记的(太长时间),这导致问题中的屏幕截图中的错误。

最后一件事,您可能将不正确的版本复制到Visual Studio的安装位置; 例如:

C:\Program Files (x86)\Microsoft Visual Studio\ {Year} \ {Community | Enterprise | Professional} \Common7\IDE\PrivateAssemblies

要么

C:\Program Files (x86)\Microsoft Visual Studio {您的版本号} \Common7\IDE\PrivateAssemblies

MySql.Data.dll

MySql.Data.Entity.EF6.dll

MySql.Web.dll

(可能必须先关闭Visual Studio)

您可以选择每个文件并转到文件属性下的“ Details选项卡,以查看您拥有的版本。

从这里(或安装它的任何地方)获取新文件: C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5 (这假定连接器v6.9.9使用框架v4.5 [查看您的项目属性’ Application->Target Framework以确认您的设置])。

注意1:当您为Visual Studio安装MySQL时,它会更新PrivateAssemblies文件夹中的文件(请参阅上面的Visual Studio路径),因此请仔细检查上面的程序集,确保它们不会更改为除目标之外的任何内容版本(在这种情况下为6.9.9)。 无论NuGet安装什么,Visual Studio都不会关心,并且会查看私有程序集(我认为在启动期间)。

注意2:如果出现“IsPrimaryKey”错误, 请参阅此处 。

我完成的App.Config可供参考(与您的比较):

    

@James Wilkins感谢您的详细解答,我要添加,有时当您添加Mysql.data或MySQL.data.entity时,程序集版本与MySqlConnector / Net安装的程序集不匹配,因为我们经常下载最新的来自Nuget的版本,这又引起了这个问题,所以我做了什么并修复了问题,我复制了dll(Mysql.data,MySQL.data.entity和web)

 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5 

到我的应用程序bin / debug文件夹并引用这些而不是从Nugets下载。 这解决了我的问题。 您可能还需要在app.config或web.config和packages.config文件中更新程序集版本。

  

  

并在packages.config中更新条目的版本

     

通过在Visual Studio 2017上使用这些确切的组件,调整以确认我已经完成了所有工作 – 包括VS2017中的entity framework的db-first gui-tool-chain- .net 4.7.1 asp.net-mvc5 wev-solution (VS2017 => ver15.5.7在撰写本文时又称完全更新的VS2017):

 Entity Framework ver6.2.0 [nuget] MySql.Data ver6.9.11 [nuget] MySql.Data.Entity ver6.9.11 [nuget] MySql.Web ver6.9.11 [nuget] MySQL for Visual Studio ver2.0.5 [system-wide msi installer] MySql-Connector ver6.9.11 [system-wide msi installer] 

我尝试使用最新的MySql-Connector(版本6.60.x)但事实certificateVS2017的gui工具用于db-first方法根本不起作用。 我猜MySql-Connector必须与其他dll版本一致。

Web.config看起来像这样:

   
[...]
[...] [...] [...] [...] [...]

承载.edmx文件的子项目App.config如下所示:

    
[...]
[...] [...] [...]

而packages.config:

         

注意:packages.config已经通过[allowedVersions]有意调整,禁止将MySql软件包无意中自动升级到更新版本。 这是因为闪避问题困扰了6.10.x版本的MySql核心。