EF使用MySQL
新專案需要使用MVC+EF+MySQL,以前使用的資料庫都是微軟的親兒子SQL Server,所以在使用的時候基本沒有遇到過什麼問題,但是這次在使用MySQL的時候卻一直出現問題,看到的部落格很多,千篇一律還沒能解決問題,整理此部落格,用以記錄與分享
EF如何使用SQL Server作為資料來源不再多說,不太瞭解的話檢視此部落格,下面將講述EF如何使用MySQL ,本次開發環境為 VS2017,MySQL版本為:MySQL5.5(影響不大)
1.配置環境
新增實體資料模型 在專案 > 新增 > 新建項 > 資料 > ADO.NET實體資料模型 > 新增 > 從資料生成 > 新建連線
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是真的好用,微軟對親兒子和其他人家的兒子態度真是不同!下面是問題解決總結:
- 安裝 mysql-connector-net 元件 和 **mysql-for-visualstudio **元件,mysql-for-visualstudio 元件無版本要求,但是 mysql-connector-net 元件需要與後面在 Nuget 中引用的 MySQL.Data.Entity 和 MySQL.Data 版本一致。如果不安裝這兩個元件,在選擇資料來源的時候不會出現MySQL Database選項
- “引用了最新的實體框架,但是找不到資料鏈接所需的與版本相容的實體框架資料庫提供程式…”,檢查 mysql-connector-net 元件、 MySQL.Data.Entity 包、MySQL.Data 包,三者的版本是否一致
- 不能引用 MySQL.Data.Entity 包、MySQL.Data 包,檢查專案的 .netframework 版本是否滿足這兩個包的最低版本需求。
- “給定關鍵字不在字典中”,關閉VS,找到並刪除 DefaultView.SEView 檔案。