簡體   English   中英

Visual Studio 2017 未在連接列表中顯示 MySQL

[英]Visual Studio 2017 not showing MySQL in connection list

我正在使用“Visual Studio 2017 Professional”。 我無法讓項目認識到 MySQL 是一個可用的數據庫選項。 當我創建一個新模型時,MySQL 沒有出現在可能的連接列表中。 我知道有很多關於這個主題的 SO 問題和其他網頁,因為我已經嘗試了很多建議。 每一個在原因和解決方案上都有微妙的不同。 似乎沒有一個解決方案對我有用。

我在 VS 2017 和 2015 中嘗試了以下操作,結果相同。 我有舊版本的 VS 可用,但向后推進似乎不值得。 我還嘗試在必要時使用“社區安裝程序”和獨立的 msi 安裝最新和舊版本的 MySQL。 我回到了 MySQL 6.10 之前的“最新”版本。

首先,當我注意到 nuget 有可用的 MySQL 包更新時,這個傳奇開始了。 我應用了它們,然后使用社區安裝程序升級已安裝的 MySQL 組件。 nuget 更改確實適用。 但是,社區安裝程序無法為 VS 卸載 MySQL。 系統安裝程序無法卸載它。 重新啟動和電源循環沒有任何作用。

在我們當地技術支持人員的建議下,我使用了第三方卸載程序,結果證明它比我們想象的更具攻擊性。 它似乎隨機踩踏了注冊表,擦除了它發現的任何內容。 長話短說(呃),我最終讓我的機器重新成像。 所以,我有一個全新的 Windows 安裝。

鑒於新的 Win10 平台,我安裝了我通常使用的各種東西,包括我通常使用的 VS 版本。 我安裝了最新的社區 MySQL 安裝程序。 我進行了“自定義”MySQL 安裝,因為我不需要此設備或結構上的服務器或許多其他東西。

我完成了一切的基本重新安裝然后重新啟動只是為了確定。 我啟動了 VS 2017 並使用最新的 .Net (4.6.1) 版本創建了一個新的 Web 應用程序。 我應用了 nuget 更新並添加了 EntityFramework 和 MySQL.Data。 然后我嘗試創建一個新的“代碼優先”模型。

我可以達到要求我創建連接的地步。 當我單擊按鈕時,可用數據庫提供程序的列表僅顯示 MS SQL。

我看過那些說要在Web.config添加行的文章,我也看過 MySQL .Net Connector 文檔也說過同樣的話。 我可以在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並創建一個Tools -> Connect to Database MySql 數據庫的連接。 如果我不這樣做,我以后就不會在可能的連接列表中看到 MySQL。 然后我清理並構建項目。 接下來我嘗試像上面那樣創建模型。 不,我可以看到 MySQL 連接選項,我可以輸入數據庫憑據並測試連接。

下一步是選擇 DB First 或 Code First。 在任何一種情況下,單擊“下一步”按鈕都會閃爍一個空白彈出窗口,然后消失。 未顯示任何錯誤且未建立任何連接。

過去從來沒有這么難過。

此時,我在 2015 年和 2017 年嘗試了很多不同的 MySQL 和 EF 版本。 如果有魔法組合請告訴我。

我已經為這場斗爭打了兩個星期。 終於找到了適合我的版本組合。 以下內容適用於兩周前我的 Win10 桌面的原始重新映像。 在開始處理MySql之前,所有補丁都被應用到系統軟件上。

就在今天早上,我重新閱讀了這個帖子(MySql 論壇)中的帖子: https : //forums.mysql.com/read.php? 174,659102,660369#msg-660369

我以為我之前已經嘗試過這些建議,但我一定搞砸了其中一個版本。 我認為海報的基本策略是合理的。 就我而言,我卸載了所有本地 MySql 部件和安裝程序。

我下載了用於 Visual Studio 的 MySQL -最新開發版本(在撰寫本文時為 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 數據庫中添加一個新的“代碼優先”模型......它奏效了!

謝謝 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. 關閉視覺工作室

  6. 安裝“MySQL for Visual Studio”(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選擇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

在 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 <-------------- 使用 Pompelo EntityFrameworkCore 時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM