【发布时间】:2018-02-28 19:16:34
【问题描述】:
我正在使用“Visual Studio 2017 Professional”。我无法让项目认识到 MySQL 是一个可用的数据库选项。创建新模型时,MySQL 未显示在可能的连接列表中。我知道有很多关于这个主题的 SO 问题和其他网页,因为我已经尝试了很多建议。每个在原因和解决方案上都有微妙的不同。这些解决方案似乎都不适合我。
我在 VS 2017 和 2015 中尝试了以下方法,结果相同。我有旧版本的 VS 可用,但似乎不值得再往前走。我还尝试在必要时使用“社区安装程序”和独立的 msi 安装最新和旧版本的 MySQL。我回到了 MySQL 的“最新”6.10 之前的版本。
首先,这个传奇始于上周,当时我注意到 nuget 提供了 MySQL 包更新。我应用了它们,然后使用社区安装程序升级已安装的 MySQL 组件。 nuget 更改确实适用。不过,社区安装程序无法卸载 MySQL for VS。系统安装程序无法卸载它。重新启动和电源循环什么也没做。
根据我们当地技术支持人员的建议,我使用了第三方卸载程序,结果证明它比我们想象的更激进。它似乎在注册表中随意踩踏,擦除了它找到的任何东西。长话短说(呃),我最终对我的机器进行了重新映像。所以,我有一个全新的 Windows 安装。
鉴于新的 Win10 平台,我安装了我通常使用的各种东西,包括我通常使用的 VS 版本。我安装了最新的 Community MySQL 安装程序。我进行了“自定义” MySQL 安装,因为我不需要此设备或结构或许多其他东西上的服务器。
我完成了所有内容的基本重新安装,然后重新启动以确保安全。我启动了 VS 2017 并使用最新可用版本的 .Net (4.6.1) 创建了一个新的 Web 应用程序。我应用了 nuget 更新并添加了 EntityFramework 和 MySQL.Data。然后我尝试创建一个新的“代码优先”模型。
我可以到达要求我创建连接的地步。当我单击按钮时,可用数据库提供程序列表仅显示 MS SQL。
我看到文章说要在Web.config 中添加行,我也看到 MySQL .Net 连接器文档也说了同样的话。我可以在Web.config 中看到 MySQL 条目,但在创建连接时它们没有显示。
奇怪的是,我可以转到Tools -> Connect to Database 并查看我的机器所知道的每种数据库类型,包括 MySQL。我可以创建连接字符串并且它可以工作。我可以在“服务器资源管理器”中看到数据库,但这并不能使其可用于代码。
好的,我一遍又一遍地遵循上述步骤,包括降级 EntityFramework 的版本以及 MySQL 版本。
我最近的尝试让我回到了最新版本的 VS 和 MySQL。 Web.config 文件的相关(我认为)部分如下。请注意defaultConnectionFactory 条目是LocalDbConnectionFactory。我已将其更改为SqlConnectionFactory,但并没有什么不同。我还更改了提供程序的顺序和主要块的顺序。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<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, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient"
name="MySQL Data Provider"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
编辑
我目前的印象是,VS 2017 是一个无法使用的烂摊子,伪装成一个已发布、可销售的产品。我又回到了2015年。
我在 2015 年更接近于让它工作。我安装了最新的 VS 和 .Net 的 MySQL 项目。我已将 nuget EF 包降级到 6.0,将 MySql 包降级到 6.8.8。
在我现在所说的“过去的美好时光”中,我可以通过选择 Models 文件夹将新模型添加到 MVC 项目;选择“添加新项目”;选择 ADO.Net 模型;选择一个连接选项(MySQL);输入连接信息;选择 DB First 或 Code First 并等待脚手架乐趣结束。
现在,我必须先转到Tools -> Connect to Database 并创建一个与 MySql 数据库的连接。如果我不这样做,我稍后将不会在可能的连接列表中看到 MySQL。然后我清理并构建项目。接下来我尝试像上面那样创建模型。不,我可以看到 MySQL 连接选项,我可以输入数据库凭据并测试连接。
下一步是选择 DB First 或 Code First。在任何一种情况下,单击“下一步”按钮都会闪烁一个空白弹出窗口,然后消失。没有显示错误,也没有建立连接。
过去从未如此艰难。
此时我已经在 2015 年和 2017 年尝试了很多不同的 MySQL 和 EF 版本。如果有魔法组合请告诉我。
【问题讨论】:
-
社区安装程序是否处理 MySQL 的连接器/NET?如果没有,那就去找吧。
-
@O.Jones:是的。文档专门说要在为 VS 安装 MySQL 之后安装它......我已经完成了。
标签: c# mysql visual-studio entity-framework