ABP.IO WEB應用程式框架 使用多個資料庫
主要紀錄將 ABP 與 IS4 相關實體搬到另一個 DB 的坑
引導
Entity Framework Core Migrations | Documentation Center | ABP.IO
首先跟著官方文件步驟走,這邊補充一些個人見解
連結字串
如果把原本資料都改到另一個 DB,那麼需要在 API.Host 與 API.DbMigrator 的 appsettings.json 加入以下設定
主要是這邊需要指定各模組的連線字串,不然他會使用 Default 去找 table,然後找不到就會報錯
如有遺漏需要去官方文件找該模組的連線字串名稱,如果沒交代要去 github 找該模組源碼
比如 Modules/Feature Management | Documentation Center | ABP.IO
官方文件沒有描述則要去 github 找該模組的連線字串名稱,位置如下
abp/FeatureManagementDbProperties.cs at dev · abpframework/abp (github.com)
其他模組理論上都在同樣的路徑可以找到對應的程式碼
Migrator
結論
MyProject.EntityFrameworkCore 必須有 migrations 資料夾
(以下為同一行) dotnet-ef migrations add 'Initial' -s .\src\MyProject.HttpApi.Host -p .\src\MyProject.EntityFrameworkCore -c MyProjectSecondDbContext -o Migrations\secondDb
要馬先不指定 -o 跑一次預設的 migrations add (會建立 migrations folder)
不然就要將第二個 db 建立在 migrations 路徑下 (指定 -o Migrations\xxxx)
原因
主要是 DbMigrationService.MigrationsFolderExists 是這樣寫的
所以只要沒有 Migrations 這個資料夾,他就不做事
說明
如果原本或其他 DB 有建出 Migrations 資料夾,那應該會正常
但假設想要先把全部 ABP 既有的資料都先搬到另一個 DB
建立遷移時又不是 output 到 Migrations 資料夾
那使用 DbMigrator 時就會因為檢查 Migrations 不存在
就當作你沒有東西要做遷移直接結束
雖然直接 dotnet ef database update 也可以建出資料庫
但是 SeedData 就會跑不出來了
參照
Entity Framework Core Migrations | Jakeuj - 點部落 (dotblogs.com.tw)

PS5
ABP
Entity Framework
回首頁
本文章從點部落遷移至 Writerside