天天看點

解決VS2013使用MySQL無法建立ADO.NET實體資料類型的問題

2016.10.28更新

出現下圖錯誤的時候,如果connector和vs插件全部已經安裝,請首先檢查你的編譯器目前是否用的x64環境。今天已經用不同機器(都是win7 64位SP1加VS2013)證明過,隻要是指定x64,基本都出現如下錯誤:

解決VS2013使用MySQL無法建立ADO.NET實體資料類型的問題

提示語:您的項目使用了最新版本實體架構;但是,找不到進行資料連接配接所需的與此版本相容的實體架構資料庫提供程式。請退出此向導,安裝相容提供程式,重新生成您的項目,然後再執行此操作。

在改成x86的模式之後,可以正常添加實體,然後再切換到x64編譯,即可。測試x64下運作正常。猜測是安裝插件是x86版本(雖然mysql官網上提示安裝包是x86,但是x86和x64都支援),是以編輯器有某些問題導緻無法在x64環境下添加。

2016.10.24更新

編譯當中遇到”ProviderManifestToken”的提示語的錯誤,提示我目前用的6.9.8的版本與edmx檔案中的不符合。我就奇了怪了,我工程裡面的确都是用nuget擷取下來,肯定版本是對的。然後找了很久,stackoverflow裡面有一個答案解救了我。

26280396/mysql-connector-with-ef6-in-visual-studio-2013

Visual Studio 12.0\Common7\IDE\PrivateAssemblies 目錄裡的檔案的确可能是以前拷貝錯了/什麼時候connector自己添加了錯誤的版本,我按照mysql的安裝檔案夾裡面的拷貝過去之後,關掉VS,重開重新生成,就可以了。

2016.10.14更新

感覺nuget中擷取的版本有點奇怪,今天又遇到這個問題,我是直接從nuget擷取那三個dll的,一模一樣的出現了。然後我對照我一個可以運作的工程,将版本換到一模一樣(EF是6.1.3,MySql是6.9.8)然後才可以正常使用。非常奇怪。

PM> Install-Package PackageName -Version VersionNum
           

原文

環境:

  1. VS2013 + EF6 + MySQL
  2. 已安裝 mysql-for-visualstudio-1.1.4
  3. 已安裝 mysql-connector-net-6.8.3(支援EF6)

問題現象:

在背景環境的情況下,項目建立項,添加ADO.NET實體資料類型。選擇MySQL的資料庫之後,在選擇使用哪個實體架構的時候,EF6雖然為選取狀态(項目本身已經使用EF6架構,此次為資料庫遷移),但是無法點選下一步,提示“使用最新架構但是不支援,請關閉并重新安裝後再試。”

如下圖:

解決VS2013使用MySQL無法建立ADO.NET實體資料類型的問題

解決方法

百度搜尋無解,直接Google + stackoverflow,找到了。

感謝此文章 StackOverflow - cant-use-a-mysql-connection-for-entity-framework-6

簡明:

從NuGet安裝MySQL的插件即可,具體是:

MySql.Data

MySql.Data.Entity

已經驗證,上述三項為最小安裝項,MySql.Data.Entities如果安裝則可能繼續出現不支援EF6實體架構的問題,請不要安裝。

添加上述Nuget引用後,重新生成工程,然後應該可正常添加MySQL的ADO.NET實體了。

如果依然不行,有兩個方法:

0. 可能需要修改config檔案

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    </providers>
  </entityFramework>
           
  1. 安裝更高版本的connector和forvs插件(connector是6.9.8, for vs是1.2.6,均已驗證可用);
  2. 可以考慮到MySQL的connector安裝目錄下(一般位于如下位置,要支援EF6的,一般都是v4.5或者以上了)
MySQL安裝目錄\MySQL Connector Net 版本号\Assemblies\v4.5
           

将mysql的相關dll全部拷貝,到這個目錄下:

理論上2012以及2013都是這個目錄,更高版本的VS因為沒有安裝是以沒有嘗試。

然後關閉VS重開,重新生成工程,應該就能成功了。