ABP框架使用Mysql資料庫,以及基於SQLServer建立Mysql資料庫的架構和資料
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 staticclass MyProjectDbContextConfigurer { public static void Configure(DbContextOptionsBuilder<MyProjectDbContext> builder, string connectionString) { //builder.UseSqlServer(connectionString);//預設SQlServer builder.UseMySql(connectionString, new MySqlServerVersion(newVersion(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資料庫的架構和資料的操作過程