首先定義倉儲層的接口,以及倉儲層實作的基類,抽象類
倉儲層的接口
具體抽象類的實作
實作自己的 DbContext
DomainContext
映射關系,針對每一個領域模型建立一個 EntityTypeConfiguration
OrderEntityTypeConfiguration
UserEntityTypeConfiguration
事務處理
要實作對 DomainContext 的事務處理的話,僅僅需要建立一個類 DomainContextTransactionBehavior
為了示範效果,在應用程式啟動時,添加一行代碼
Startup
資料庫的注冊部分
ServiceCollectionExtensions
這一行代碼的調用位置是在 ConfigureServices 裡面
啟動程式,運作過程中 EF 架構會根據定義的實體映射關系生成資料庫,可在 Mysql 資料庫中檢視生成結果
接着豐富一下 Order 的映射關系
啟動程式,可以看到資料庫修改結果
這說明可以在倉儲層定義領域模型與資料庫的映射關系,這個映射關系可以組織為一個目錄,為每一個領域模型設定一個類型來定義,并且這個過程是強類型的,這樣的結構,便于後期維護
另外倉儲層的話,定義了一個 IOrderRepository,僅僅實作了 IRepository 泛型接口,引進 Order,由于 Order 實際上有一個主鍵是 long,是以這裡把主鍵類型也傳給 IRepository
Order
這樣子,Order 的倉儲就定義完畢
那麼 Order 倉儲的實作也非常簡單,僅僅需要繼承 Repository,把 Order,long,DomainContext 傳入泛型 Repository 即可,這裡還實作了 IOrderRepository
通過這樣簡單的繼承,可以複用之前定義的代碼,快速實作倉儲層的定義
可以通過代碼提升看到倉儲層是有 Add,Update,Remove,Delete 方法,還有 UnitOfWork 的屬性

這樣一來就完成了倉儲層的定義,可以看到倉儲層的代碼非常的薄,僅僅包含了一些接口的定義和類的繼承,需要自定義一些方法的時候,可以在倉儲層定義一些特殊方法,比如 AddABC 等特殊的邏輯都可以在這裡去實作
另外一個在組織領域模型和資料庫的關系的時候,可以很清晰的看到,是在 EntityConfiguration 這個目錄下面,為每一個模型定義一個映射類,當領域模型越來越複雜,資料庫的結構越來越複雜的時候,這樣的組織結構會非常的清晰
GitHub源碼連結:
https://github.com/witskeeper/geektime
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。
歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。
如有任何疑問,請與我聯系 ([email protected]) 。