ABP入門系列(21)——切換MySQL數據庫


ABP入門系列目錄——學習Abp框架之實操演練
源碼路徑:Github-LearningMpaAbp


1. 引言

Abp支持MySql已經不是什么新鮮事了,但按照官方文檔:Entity Framework - MySql Integration來,你未必能成功切換,本文就記錄下切換MySql數據庫遇到的一些坑,供后人乘涼!

2. 環境准備

MySql數據庫好啊,開源免費,不再像SqlServer那樣累贅。而且結合.Net Core,他倆賊般配的說!但MySql自從賣給Oracle后,好像就不怎么好玩了,安裝起來還是挺費勁的說。一怒之下,轉投MariaDB。

MariaDB由MySQL之父Michael Widenius主導開發的,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此后,隨着SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。MariaDB是目前最受關注的MySQL數據庫衍生版,也被視為開源數據庫MySQL的替代品。

MariaDB完全兼容MySql,所以就放一百二十個心好了。就不廢話了,自行點擊MariaDB Downloads 下載安裝吧。

3.開始切換環境

本文還是基於我之前的LearningMpaAbpDemo進行演示。

3.1. 安裝MySql.Data.Entity

Solution-->右鍵-->'Manage NuGet Packages for solution...',安裝MySql.Data.Entity到以”.Web"和“.EntityFramework”結尾的項目中去,如下圖:
MySql.Data.Entity
注意版本號,安裝最新,我可不保證可以成功!
修改“.EntityFramework”結尾的項目Migrations文件夾下的Configuration.cs類,在構造函數中添加SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());。如下所示:

3.2. 設置連接字符串

修改Web.Config,添加連接字符串:
<add name="Default" connectionString="server=localhost;port=3306;database=sampledb;uid=root;password=***" providerName="MySql.Data.MySqlClient"/>
之前的連接字符串就注釋掉吧!

3.3. 重新添加遷移

如果你的Migrations文件夾下有很多以日期開頭(比如:20171122022_)的遷移文件,全部刪掉他們!
然后Tools-->Nuget Package Manage--> Package Manage Console:輸入 Add-Migration "Abp_MoveTo_Mysql"執行:
進行遷移

是的,你可能執行不成功,會遇到第一個坑:

Type is not resolved for member 'MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d'.

如何搞呢?下載MySql為.Net平台提供的Connector安裝就好了,
安裝地址:Download Connector/Net。記住要選對對應的版本:
6.9.10

安裝后,重新執行以上命令即可。

3.4. 執行遷移

執行命令Update-Database -Verbose,這個時候你會遇到第二個坑:

Index column size too large. The maximum column size is 767 bytes.

這是因為mysql對列的大小有限制。EF6使用MigrationHistory表跟蹤模式的變化,以確保一致性的數據庫模式和概念模式。由於主鍵太大,默認情況下此表不適合MySQL。要解決這種情況,需要縮小該表的鍵大小。具體可以參考以下兩個鏈接:

  1. Entity Framework with MySql and Migrations failing because “max key length is 767 bytes”
  2. Entity Framework 6 Support

這邊有個簡單的做法,只需修改DbContext類上添加[DbConfigurationType(typeof(MySqlEFConfiguration))]聲明即可。如下:

重新執行遷移命令,即可!

4. 最后

好久沒更新了,現在重拾Abp,后續會結合ABP+.Net Core+MySQL,帶給大家進階分享,盡情期待!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM