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 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數據庫的架構和數據的操作過程