ABP默認的資料庫是SQLServer,不過ABP框架底層是EF框架,因此也是很容易支持其他型別的資料庫的,本篇隨筆介紹在ABP框架使用Mysql資料庫,以及基于SQLServer創建MySql資料庫的架構和資料的處理,
如果需要其他方式資料庫的支持,那么需要引入相應的支持程式集,Nuget中安裝MySql相關包,Oracle公司提供的MySql 包試了很多次,都還是用起來有問題,所以現在都是用的第三方的MySql包,這個包也是ABP官方檔案中推薦使用的,
pomelo.entityframeworkcore.mysql
pomelo.entityframeworkcore.mysql.design
目前使用的是基于正式版的.NETCore5.0,那么Microsoft.EntityFrameworkCore.Relational對應版本是5.0.0,因此,對應這些版本的驅動如下圖所示,

在EntityFrameworkCore層中找到XXDbContextConfigurer,修改DbContext中資料庫配置,默認使用的SqlServer,修改為mysql,
namespace MyProject.EntityFrameworkCore { /// <summary> /// 配置使用特定資料庫的處理 /// </summary> public static class MyProjectDbContextConfigurer { public static void Configure(DbContextOptionsBuilder<MyProjectDbContext> builder, string connectionString) { //builder.UseSqlServer(connectionString);//默認SQlServer builder.UseMySql(connectionString, new MySqlServerVersion(new Version(5, 7)));//MySQL //builder.UseNpgsql(connectionString);//PostgreSQL //builder.UseOracle(connectionString);//Oracle } public static void Configure(DbContextOptionsBuilder<MyProjectDbContext> builder, DbConnection connection) { //builder.UseSqlServer(connection);//默認SQlServer builder.UseMySql(connection, new MySqlServerVersion(new Version(5, 7)));//MySQL //builder.UseNpgsql(connection);//PostgreSQL //builder.UseOracle(connection);//Oracle } } }
其中UseMySql需要用到第二個版本引數,我Mysql用的是Mysql5.7,因此使用代碼構建版本引數,
new MySqlServerVersion(new Version(5, 7)
我們在Host啟動專案里面的appsettings.json里面定義了不同資料庫的連接資訊,如下所示,
{ "ConnectionStrings": { "Default": "Server=.\\SQL2014; Database=MyProjectDb; Trusted_Connection=True;", "Oracle": "User Id=orcl;Password=orcl;Data Source=orcl;Persist Security Info=True;", "MySql": "Server=localhost;Database=myprojectdb;Uid=root;Pwd=123456;", "PostgreSQL": "Server=localhost;Port=5432;Database=myprojectdb;User Id=postgres;Password=123456" }, "RedisCache": { "ConnectionString": "localhost", "DatabaseId": "-1" }, ...............
而我們系統不同的資料庫連接就就是來自ConnectionStrings里面的鍵值物件,我們ABP框架里面,使用參考常數來配置對應的資料庫連接,
public class MyProjectDbContextFactory : IDesignTimeDbContextFactory<MyProjectDbContext> { public MyProjectDbContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<MyProjectDbContext>(); //獲取組態檔資訊 var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder()); //通過連接字串切換對應的資料庫,ConnectionStringName默認為Default MyProjectDbContextConfigurer.Configure(builder, configuration.GetConnectionString(Constants.ConnectionStringName)); return new MyProjectDbContext(builder.Options); } }
那么我們修改其中對應的常數定義,切換為我們所需要的Mysql資料庫即可,如下所示,

至此,代碼上修改就完成了,那么我們現有運行的SQLServer資料庫,如何遷移到Mysql環境中去呢?
2、基于SQLServer創建Mysql資料庫的架構和資料
上面小節介紹了切換到其他資料庫Mysql資料庫的時候,代碼上的調整修改,但是我們還需要把已有SQLServer上運行的資料庫遷移到Mysql上去,如何處理呢,
有些人希望通過ABP帶有的Migrator專案進行專案資料庫的重構,不過我不建議使用這個,因為我們實際開發的時候,變動了很多資料庫,而變動了再映射回到代碼里面,比較麻煩,不如在資料庫基礎上進行遷移來的快捷完整,
我這里通過工具的方式,把SQLServer資料庫匯入到Mysql資料庫里面,然后在匯出腳本進行一定的調整就可以完成,
我這里說到的工具就是Navicat Premium,由于我的資料庫用的是SQLServer2014,因此建議使用Navicat Premium15或更高版本來處理資料庫的遷移,我測驗過Navicat Premium·11是不行的,
在Navicat Premium工具上連接好Mysql資料庫和SQLServer資料庫,然后在Mysql里面創建一個同名的資料庫,以Utf-8編碼創建資料庫即可,如下所示,

然后在工具上選擇資料庫傳輸

在彈出的界面中選擇源資料庫和目標資料庫,如下所示,

然后一步步處理即可完成資料庫結構和資料的匯入,這樣Mysql資料庫里面就有對應的資料庫結構和資料了,
不過完成這部還是不夠十分完美,因為從SQLServer鐘匯入到Mysql資料庫里面,資料庫的自增長列全部被取消了,如果我們在管理界面里面修改,則無法修改帶有約束關系的主鍵為自增長,
因此我們需要再次調整一下,也就是把Mysql資料庫匯出為SQL腳本,然后在腳本上進行一定的調整即可,

用Notepad++打開匯出的資料庫腳本,對自增長的表欄位進行添加一個關鍵字AUTO_INCREMENT,標注為自增長即可,如下所示,

然后洗掉已有的Mysql資料庫,然后重新創建對應名稱的資料庫,重新匯入Mysql腳本進行運行生成新的表和資料即可完成,
運行ABP后臺專案,啟動Swagger界面,如下所示,

然后啟動Vue+Element的客戶端進行測驗Mysql資料庫的運行情況,前端正常,

以上就是介紹ABP框架使用Mysql資料庫的代碼調整,以及基于SQLServer創建Mysql資料庫的架構和資料的操作程序
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/231248.html
標籤:.NET技术
上一篇:[Windows] Prism 8.0 入門(上):Prism.Core
下一篇:C# Task多執行緒與佇列
