書接上回,搞定讀寫分離的配置僅僅是第一步,後面的纔是重頭戲。
1、項目組織
項目的組織採用三層架構:框架層/模型層、業務層、WebApi表現層。
- 框架層dll包含了各類輔助類, 中間件等應該是最底層的架構庫;EF 模型層也放在底層,但有獨立的的類庫構成包含dbcontext,主要由工具自動化生成)。
- 業務層放在中間,其引用來自EF的Model層類庫,由DTO類、業務Service、Automapper映射,以及錯誤定義等類構成。
- WebApi表現層,主要附帶部分驗證邏輯,調用業務層的接口實現對外的api服務。
2、DbContextFactory
讀寫分離的核心類就是DbContextFactory,該類在生命週期內管理所有由其產生的DbContext包裝類,其根據指定的參數,返回主庫DbContext或從庫DbContext包裝類,並存放在一個詞典裏,在生命完結時釋放這些DbContext。由於是DbContext一級進行管理的,其與微軟的DbContextFactory相比,則不夠輕量和智能。然而在提供主從庫DbContext上,又比較自由靈活。
/// <summary>
/// EF數據上下文工廠對象,可以指定ConnectionString構造DBContext
/// </summary>
public class Core