更換Mysql資料庫-----基於Abo.io 的書籍管理Web應用程式

2023-05-29 18:01:54

之前公司一直使用的是ASP.NET Boilerplate (ABP),但是當解決方案變得很大時,專案啟動就變得非常慢,雖然也想了一些辦法,將一些基礎模組做成Nuget包的形式,讓整個解決方案去參照。但是整個專案還是很臃腫,各個專案之間的耦合性太強,很難將其拆開;無法進行微服務的部署,擴充套件性差。之後,選擇,Abp的vnext版本,優點:

1. 其新的ABP框架可方便的開發微服務並使它們相互通訊。亦可作為微服務單獨部署,或者可以嵌入到單個應用程式中;
2. 模組化。最明顯的就是更加模組化,使專案更加清晰明瞭,設計更合理;
3. 更多可延伸性。新的ABP框架為內建服務提供了更多的擴充套件點和覆蓋的能力;
4. 支援關係型和非關係型資料庫,Redis作為分散式快取,使用RabbitMQ作為事件匯流排的訊息處理方式,使用Quartz/HangFire作為定時任務的處理,引入可了IdentityServer4服務;

接下來呢,會從 https://abp.io/上下載 官網構建一個名為 Acme.BookStore 的用於管理書籍及其作者列表的ABP應用程式

1、首先進入介面 https://docs.abp.io/zh-Hans/abp/latest/Tutorials/Part-1?UI=MVC&DB=EF,然後根據偏好選擇下載,我們以第一個為例

2、官網的程式碼放在github上,點選abp-samples,就可以看到它的所有解決方案,BookStore-Mvc-EfCore 就是我們今天要更改的解決方案

3、使用Git工具克隆本專案

git clone https://github.com/abpframework/abp-samples.git

4、稍等一段時間後,使用VS Code開啟本專案(VS 2019不支援,想使用的升級到VS 2022),在工具中新增 vscode-solution-explorer 元件

5、點選解決方案,右鍵選擇Build,對專案進行包還原,從解決方案的結構上看,就能看到其清晰的分層,解決方案中的專案及依賴關係.

6、接下來點選Acme.BookStore.EntityFrameworkCore,找到它的Acme.BookStore.EntityFrameworkCore.csproj檔案,更換Nuget包,解決方案之前使用的是SQLServer,要將其更改為Mysql,之後找到BookStoreDbContextFactory和BookStoreEntityFrameworkCoreModule檔案,更改其參照的地方



7、重新修改資料庫連線字串,並刪除Migrations資料夾下的檔案

找到*.Web 和 *.DbMigrator中的appsettings.json檔案對資料庫連線字串進行修改
"Default": "Server=localhost;Port=3306;Database=資料庫名字;Uid=root;Pwd=資料庫密碼;Convert Zero DateTime=True"

8、在*.EntityFrameworkCore目錄下執行命令進行資料庫遷移,之後就可以在資料庫中看到所有的表

dotnet ef migrations add Init
dotnet ef database update

9、所有準備都已完成,執行應用程式,選中*.web,右鍵點選Run,報錯啟動不了,通過查詢,發現在wwwroot下沒有libs檔案

Could not find the bundle file '/libs/abp/core/abp.css' for the bundle 'LeptonXLite.Global'!
安裝ABP CLI, 用於自動執行基於 ABP 的解決方案的一些常見任務
dotnet tool install -g Volo.Abp.Cli
之後安裝libs
abp install-libs

再次進行Run,成功啦!!以admin作為使用者名稱和1q2w3E* 作為密碼登入到應用程式,登入成功後,就可以看到書籍管理功能