如何實現資料庫資料到Abp vnext實體物件的同步?以及程式碼生成工具

GroundSoft發表於2024-04-18

在採用了EF Core的Code First方式下,如果你在資料庫中直接新增了新表或儲存過程,你需要在專案程式碼中手動反向工程這些資料庫的更改,以保持Code First的程式碼與資料庫同步。這種情況可以透過如下兩個步驟來實現:

  1. 從現有資料庫建立模型 使用Entity Framework Core的Scaffold-DbContext命令,可以從資料庫生成實體模型及DBContext。此操作會根據資料庫中的表和檢視生成對應的領域模型和配置程式碼。命令如下:

shell

   Scaffold-DbContext "YourConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force

其中,“YourConnectionString”是資料庫連線字串,"Models"是你希望生成的類放置的目錄。使用-Force引數可以在必要時覆蓋現有檔案。

  1. 儲存過程對映 對於儲存過程,EF Core不會自動生成C#方法,你需要手動新增呼叫儲存過程的程式碼。使用DBContext的FromSqlRawExecuteSqlRaw方法來執行儲存過程,並將結果對映到領域模型實體上,例如:

csharp

   var result = context.YourEntityModel.FromSqlRaw("EXEC YourStoredProcedure @param1, @param2", parameters).ToList();

這樣,雖然不能自動同步,但是透過Scaffold-DbContext來輔助生成模型,加上手動新增儲存過程的呼叫方法,還是可以將資料庫的變更較為方便地同步到專案程式碼中的。

要記住的重點是,如果你是在Code First方式下工作,原則上應該儘量避免直接在資料庫端進行結構變更,而是應透過更改領域模型和使用EF Core遷移(Migrations)來同步資料庫結構,這有助於保持程式碼與資料庫結構的一致性和追蹤性。直接在資料庫中進行變更並反向工程到程式碼中應視為特殊情況下的臨時做法。

ABP vNext框架社群確實開發了一些實體類程式碼生成工具,幫你從資料庫生成領域模型的程式碼。下面是幾個高讚的GitHub倉庫,其中可能包含一些你會感興趣的工具:

  1. NameIsBad/abp-vue

    • 描述: ABP vNext+vue3(vben)+code generator

    • 星星數量: 30

    • 這個倉庫提供了與Vue3整合的ABP vNext專案的程式碼生成器。

  2. WuLex/AbpVnextGenerator

    • 描述: Abp Vnext Basic Code Generator

    • 星星數量: 29

    • 這個工具提供了基本的ABP vNext程式碼生成能力,可以幫你生成實體類程式碼等。

  3. neozhu/abpvnextsmartcodegenerator

    • 描述: Visual Studio.net 2017 extension for abp vnext code generator archetype

    • 星星數量: 24

    • 如果你使用的是Visual Studio 2017,這個擴充套件可能正合你意,它是為ABP vNext編寫的程式碼生成器。

在你選擇使用這些工具前,建議檢查一下工具的更新日期和社群的反饋,以確保它們能夠適應你的專案需求。建立實體類時,這些工具可以根據資料庫的表自動生成對應的實體類程式碼和相應的配置檔案,幫助你更快地整合到ABP專案中。如果有具體的工具方面的問題,可以檢視對應倉庫的文件或向社群尋求幫助。

相關文章