A2D Framework 原支援 ADO.NET 讀寫分離,現擴展支援 Entity Framework。適用場景:單寫庫、多讀庫結構一致、中小型專案。
用設計器/Database First 建模,再切換為 Code First 使用(刪除 OnModelCreating 中拋異常的代碼)。
server=192.168.1.20;uid=sa;pwd=111111;database=DFH server=192.168.1.21;uid=sa;pwd=111111;database=DFH server=192.168.1.22;uid=sa;pwd=111111;database=DFH Optimization_Sales server=192.168.1.23;uid=sa;pwd=111111;database=DFH
public interface IOrder {
[SQLDispatcher] // 無參數:寫走主庫,讀從 ReadDBs 輪詢
List QueryOrders(string keyword);
[SQLDispatcher("Optimization_Sales")] // 顯式指定專用讀庫
List QueryByEmail(string email);
}
[AOPServiceEnabled]
public class OrderImpl : ContextBoundObject, IOrder {
private IRepository _repo = ObjectFactory.Resolve();
public List QueryOrders(string k) => _repo.Get(w => w.FirstName.Contains(k));
public List QueryByEmail(string e) => _repo.Get(w => w.Email == e);
}
A2DConfig.LoadConfig(); ObjectFactory.Register(); ObjectFactory.Register (); // 內部處理分發 ObjectFactory.Register (); var svc = ObjectFactory.Resolve (); var orders = svc.QueryOrders("test");
IntelligentEFRepository 攔截 LINQ 查詢,解析 SQL,交由 SqlHelperCoordinator 分發DBSelector 根據 SQL 關鍵字 (INSERT/UPDATE/DELETE) 或 --WRITE 註釋判斷走主庫,否則從對應區域讀庫隨機選一個DedicatedRegion 允許特定業務(如報表)走專門優化索引的讀庫ContextBoundObject 以支援 AOP 攔截