ABP框架是一個非常龐大的框架,里面的東西有很多,那么如果我需要使用ABP進行項目的開發,具體的使用流程是怎樣的呢?接下來將以一個簡單的電影票管理“系統”為例子具體的實現一下。
一. 實體的創建
實體是屬於領域層的,所以我們創建到Core項目中
1.創建實體的時候需要繼承自Entity,這個是遵循了ABP框架的規則,在ABP中所有的實體都是繼承自Entity,Entity這個類實際上是實現了IEntity這個接口,這個接口中默認的已經定義了Id這個屬性,所以我們的實體不需要寫Id屬性,默認的Id是int的主鍵類型,當需要其它類型,可以使用Entity的泛型類,例如Entity<long>
2. 在實際的項目中,我們經常有一些常用的字段,比如創建時間CreationTime、軟刪除IsDeleted、創建人CreatorUserId等等,這些在ABP框架中都已經實現了相應的審計接口和審計實現類。ABP建議如果沒有特殊的情況,何必費力自己去實現接口呢?嘿嘿,直接使用實現類,我上面的實體中使用了審計接口ICreationTime,然后自己實現了這個CreationTime這個屬性。其他的在這里不再舉例。
3. 作為一個數據庫遷移的優化。需要對string類型指定相應的長度,否則遷移到數據庫的時候將會對應Max長度,浪費空間。
二. 數據庫遷移
在我們使用CodeFirst的時候,我們需要手動的創建DbContext,在ABP框架中已經創建好了,在EntityFrameworkCore層找到DbContext,然后為我們自己定義的實體添加IDbSet
然后使用指令Add-Migration “addMovieTicket”,生成如下的遷移文件
接下來直接使用Update-database就可以了。
如果我們想在初始化的時候向數據庫中添加幾條數據,那么怎么辦呢?
這個我們可以看到在EntityFramworkCore項目下有一個Seed文件夾,這個文件夾里的文件就是用來預制種子數據的,所以我們可模仿創建相應的Creator
創建好相應的Creator,還得去調用這個Creator才行,找到SeedHelper文件,修改SeedHostDb。
接下來再次Update-database(必須已經創建好相應的表,否則提示找不到對應的表)就OK了
補充一下:
常用的遷移指令
1.創建: add-migration(可以通過添加參數-Context針對某一個DbContext進行遷移)
2.更新到數據庫: update-database
3. 版本回退 update-database -migration “addMovieTicketPreview‘
問題更正:
從我上面自定義的添加一些初始化數據的Creator就可以發現,當Context每次初始化的時候,都會去創建一個相同名稱的電影信息,數據庫如下
所以對Creator進行修改
這樣就解決了,只怪當初寫的時候就偷懶了。。。。