1. 程式人生 > >EF使用MySQL

EF使用MySQL

新專案需要使用MVC+EF+MySQL,以前使用的資料庫都是微軟的親兒子SQL Server,所以在使用的時候基本沒有遇到過什麼問題,但是這次在使用MySQL的時候卻一直出現問題,看到的部落格很多,千篇一律還沒能解決問題,整理此部落格,用以記錄與分享

EF如何使用SQL Server作為資料來源不再多說,不太瞭解的話檢視此部落格,下面將講述EF如何使用MySQL ,本次開發環境為 VS2017,MySQL版本為:MySQL5.5(影響不大)

1.配置環境

新增實體資料模型 在專案 > 新增 > 新建項 > 資料 > ADO.NET實體資料模型 > 新增 > 從資料生成 > 新建連線 選擇資料來源

在這裡可以看到,並沒有MySQL的資料來源。 這是因為沒有安裝MySQL與VS的整合元件下載地址和MySQL連線元件下載地址,安裝完畢後就有了。 在這裡插入圖片描述

2.使用Nuget 安裝 MySQL.Data.Entity 和 MySQL.Data

劃重點,這裡容易出問題

常見問題

(1) .閃退

在上一步,安裝完 mysql-connector-net 元件mysql-for-visualstudio 元件後,雖然在VS上出現了 MySQL Database 選項,但是如果直接點選繼續的話,會出現閃退。這是因為沒有在Nuget中安裝 MySQL.Data.Entity 和 MySQL.Data 這兩個包。

如同在使用 SQL Server 作為資料來源的時候,需要在 Nuget 中安裝 EntityFramwork 包,才能正常建立ADO.NET實體資料模型,這裡也是一樣,如果不安裝 MySQL.Data.Entity 和 MySQL.Data 這兩個包,同樣無法建立以 MySQL 為資料來源的 ADO.NET 實體資料模型。

(2) .您的專案引用了最新實體框架;但是,找不到資料鏈接所需的與版本相容的實體框架資料庫提供程式……

上面在Nuget中,安裝過 MySQL.Data.Entity 和 MySQL.Data 這兩個包後,應該就可以進入下一步了,但是這裡面可能還會遇到另外一個問題 您的專案引用了最新實體框架;但是,找不到資料鏈接所需的與版本相容的實體框架資料庫提供程式……

如圖所示: 您的專案引用了最新實體框架;但是,找不到資料鏈接所需的與版本相容的實體框架資料庫提供程式 這個問題困擾了我很久,在網上找到了很多關於這個問題的部落格,雖然博主都給瞭解決方案,但是我使用那些解決方案並沒有能很好的解決問題,最後找到了其他的、更簡單的解決方案解決了問題

大家還記得前面安裝的 mysql-connector-net 元件 嗎, MySQL官網上這個元件的版本最新的是 8.0.12,但是 VS2017 的 Nuget 包管理器中 MySQL.Data.Entity 穩定版最新版本為6.10.8 MySQL.Data穩定版最新版本為 8.0.12 ,出現上面的報錯,就是因為這三者版本不一致,三者版本必須一致 ,否則就會報這個錯誤!

三者版本

可以先新增指定版本的 MySQL.Data.Entity 這樣會自動新增上對應版本的 MySQL.Data

這樣就可以順利建立 ADO.NET實體資料模型了 在這裡插入圖片描述

(3) .上述三者版本一致,但是仍然不能正常建立

檢查專案的 .netframwork 版本,不同的 MySQL.Data.Entity 版本有不同的 **.netframwork ** 最低版本支援,在 packages 資料夾或 Nuget 中檢視所需支援的最低 .netframwork 版本,檢測所建專案的 .netframwork 版本是否符合要求。

(4) 給定關鍵字不在字典中

這個問題開始並沒有碰到,一切正常,不過後來在別人電腦上操作,上午建立一切正常,但是下午就出現了這個問題,然後就一直無法建立,在CSDN上發現了一篇部落格,解決了問題,後面為參考部落格原文:

——————————————————————參考部落格———————————————————————

導致這個問題的原因有很多,比如資料庫編碼不一致、mysql connector的版本不一致等等

解決辦法:

1.確報VS中使用的MySQL版本(NuGet獲取相應即可)與當前電腦安裝的Mysql Connector版本一致;

2.關閉VS ,在系統盤中找到檔案 DefaultView.SEView 並刪除。

通常路徑為:使用者\AppData\Microsoft\VisualStudio\xx\ServerExplorer

——————————————————————參考部落格End—————————————————————

我使用的是第二種方案解決的問題,因為前面三者的版本都一致,不過 DefaultView.SEView 這個檔案並不是很好找,根據博主給的地址沒有找到,我使用的是 Everything 軟體找到的這個檔案,並刪除,找到了2個這個檔案,都刪除了,通過刪除後的VS的狀態,懷疑這個檔案是用來儲存每次連線資料庫的資訊檔案,因為刪除過這個檔案後曾經在VS中使用EF連線資料庫的賬號密碼都清空了,不過已經能正常建立 ADO.NET 實體資料模型了。

總結

這次遇到了不少的問題,但是本質上來說也算不上是特別嚴重的問題,VS2017是真的好用,微軟對親兒子和其他人家的兒子態度真是不同!下面是問題解決總結:

  1. 安裝 mysql-connector-net 元件 和 **mysql-for-visualstudio **元件,mysql-for-visualstudio 元件無版本要求,但是 mysql-connector-net 元件需要與後面在 Nuget 中引用的 MySQL.Data.Entity 和 MySQL.Data 版本一致。如果不安裝這兩個元件,在選擇資料來源的時候不會出現MySQL Database選項
  2. “引用了最新的實體框架,但是找不到資料鏈接所需的與版本相容的實體框架資料庫提供程式…”,檢查 mysql-connector-net 元件、 MySQL.Data.Entity 包、MySQL.Data 包,三者的版本是否一致
  3. 不能引用 MySQL.Data.Entity 包、MySQL.Data 包,檢查專案的 .netframework 版本是否滿足這兩個包的最低版本需求。
  4. “給定關鍵字不在字典中”,關閉VS,找到並刪除 DefaultView.SEView 檔案。