【问题标题】:Visual Studio 2017 not showing MySQL in connection listVisual Studio 2017 未在连接列表中显示 MySQL
【发布时间】: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 -&gt; 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


【解决方案1】:

我已经与这场战斗战斗了两个星期。我终于找到了适合我的版本组合。以下内容适用于两周前我的 Win10 桌面的原始重新映像。在开始处理 MySql 之前,所有补丁都已应用于系统软件。

就在今天早上,我重新阅读了这个帖子(MySql 论坛)中的帖子:https://forums.mysql.com/read.php?174,659102,660369#msg-660369

我以为我以前尝试过这些建议,但我一定搞砸了其中一个版本。我认为海报的基本策略是合理的。就我而言,我卸载了所有本地 MySql 部件和安装程序。

我下载了 MySQL for Visual Studio - 最新开发 版本(撰写本文时为 2.0.5 msi)并安装了它。

我找到了 .Net 连接器的旧版本并安装了 6.9.11

在 VS 2017 中,我使用 .Net 4.6.1 创建了一个虚拟项目。

我应用了挂起的 VS 更新。

我建立了这个项目。

我去了“项目 -> 管理 Nuget 包”并将 EntityFramework 安装/降级到 6.0。

我在6.9.11版本安装了MySql.Data、MySql.Data.Entity和MySql.Web

我清理并构建了项目,然后尝试从 MySql 数据库中添加一个新的“代码优先”模型......它成功了!

【讨论】:

    【解决方案2】:

    感谢 7 Reeds 的回复。它让我开始工作,尽管我的做法略有不同。

    在 VS 2017 中连接 MySQL 5.6:

    1. 从机器上卸载任何 MySQL 产品
    2. 将目标框架设置为 .NET Framework 4.5.2
    3. 在 Nuget 中卸载 EntityFramework 和任何 MySQL 包
    4. 安装 MySql.Data.Entity (6.10.7)

      它还将安装所需版本的 Nuget 包 MySql.Data (6.10.7)、EntityFramework (6.1.3) 和 BouncyCastle (1.8.3.1)。

      MySql.Data.Entity 包说它依赖于 Google.Protobuf,但它没有安装它,它对我来说很好。

      它在我的项目中添加了对 BouncyCastle.Crypto (1.8.3.0)、EntityFramework (6.0.0.0)、MySQL.Data (6.10.7.0) 和 MySql.Data.Entity.EF6 (6.10.7.0) 的引用。

    5. 关闭 Visual Studio

    6. 安装“Visual Studio 的 MySQL”(1.2.8)
    7. 安装“连接器/NET”(6.10.7)
    8. 删除 bin 和 obj 文件夹
    9. 打开 Visual Studio 并重建解决方案
    10. Add New Item > ADO.NET Entity Data Model > 现在你在向导中
    11. 选择EF Designer from database
    12. 在下一个屏幕(“实体数据模型向导”)上,单击New Connection...
    13. 在“连接属性”屏幕上,单击“数据源”的Change... 按钮
    14. 您应该能够选择MySQL Database 作为“数据源”
    15. “数据提供者”应自动填充.NET Framework Data Provider for MySQL
    16. 耶!像往常一样继续前进

    为了后代,这是我的 WPF 应用程序的 app.config:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
    
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v13.0" />
          </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.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </providers>
      </entityFramework>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-6.10.7.0" newVersion="6.10.7.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <connectionStrings>
        <add name="MyDB" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=my.example.com;user id=NotMyRealUserID;password=NotMyRealPassword;persistsecurityinfo=True;database=MyDatabase&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>
    
    

    我不确定是什么造成了这个,但我的“环境变量”中有一个名为 MYSQLCONNECTOR_ASSEMBLIESPATH 的“用户变量”,其值为 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.10.7\Assemblies\v4.5.2

    【讨论】:

      【解决方案3】:

      在 appsettings.json:

      "ConnectionStrings": { "DefaultConnection": "Server=localhost;database=MusicStoreDB;user id=root;Charset=utf8;" },
      

      在 Startup.cs 中的 ConfigureServices() 处:

      using Microsoft.EntityFrameworkCore; using MySql.Data.MySqlClient; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection;
      
      ... services.AddDbContext(options => options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));
      

      注意:更改为: UseMysql

      【讨论】:

        猜你喜欢
        • 2017-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多