多 ORM 双引擎架构与选型矩阵 (Multi-ORM Dual-Engine Architecture)
在企业级后端架构中,“ORM 之争”往往是技术选型中最具争议的话题:
- SqlSugar:国内生态丰富、CodeFirst 敏捷快速、按日分表自动化极佳、且自带完善的无缝号与元数据自省能力;
- Entity Framework Core (EF Core):微软官方主力、类型推导严谨、具备强大的 LINQ 语法树翻译与复杂的跨实体导航属性图;
- Dapper:轻量级微型 ORM、接近原生 ADO.NET 的极限吞吐、只读复杂报表查询首选;
- MongoDB:面对高吞吐非结构化数据、审计事件归档与动态 JSON 文档的最佳载体。
BitzOrcas.Modern 彻底跳出了“非此即彼”的单选思维,在底座 src/Framework 中构建了多 ORM 双引擎协同体系(Multi-ORM Dual-Engine):通过抽象统一的 IRepository<T, TId>、IUnitOfWork 与强类型只读端口,让不同引擎在同一个应用中发挥各自所长。
1. 四大持久化引擎职责矩阵
BitzOrcas 对四大底层适配器划定了明确的物理边界与适用场景:
引擎特性与技术选型权衡表
| 持久化引擎 | 核心优势 | 团队适用场景 | BitzOrcas 中的首选分工 |
|---|---|---|---|
| SqlSugar | - 启动期 SQL Server 目录探测与毫秒级补表补列 - 内置高效分表(按月/按日自动物理拆分) - 零配置文件即可实现雪花 Id 回填 | 敏捷迭代、追求高效交付、需要频繁根据实体演进修改数据库结构的中大型团队 | 默认主推写引擎:负责平台核心能力(Identity、Workflow、Tickets)与业务实体的 CodeFirst 治理。 |
| EF Core | - 严格的 ChangeTracker 变更追踪 - 完备的 Fluent API 实体关系映射 - 微软官方生态深度兼容与原生 AOT 支持 | 具有深度 EF Core 经验、需要强类型复杂导航属性级联、或企业架构有强制规范要求的团队 | 同构备选写引擎:通过 BitzOrcasDbContext 提供对等聚合根仓储与 CAP 事务发件箱支持。 |
| Dapper | - 极度轻量,内存分配接近零 - 允许编写手写高度优化的原生 SQL - 完美支持只读从库多连接池打散 | 复杂报表看板、大屏实时统计、毫秒级响应的大规模分页列表查询 | 只读查询引擎:实现 IReadStore 端口,通过只读连接池剥离主库读压力。 |
| MongoDB | - BSON 动态文档存储 - 写入吞吐量极高,无死锁顾虑 - 宽表与历史操作 Payload 归档方便 | 海量用户行为埋点、操作审计快照、第三方系统交互原始报文存档 | 审计与非结构化日志引擎:用于 AuditLogging 归档与历史留痕。 |
2. 实体同构与双引擎映射规范
为了保障业务模块在 SqlSugar 与 EF Core 之间切换时无需推翻重写领域模型,BitzOrcas 制定了实体同构规范(Isomorphic Entity Invariant):
- 基类统一:所有聚合根继承
TenantAggregateRoot<TId>或Entity<TId>; - 中立元数据与 Fluent 双重保障:
- 契约层实体类统一标注来自
BitzOrcas.Persistence.Metadata的适配器中立元数据([BitzTable]、[BitzColumn]),保持 Contracts 层 100% ORM 中立,严禁直接依赖 SqlSugar 或 EF Core 特性; - 在持久化基础设施层,由源生成器自动物化适配,或在 EF Core 侧通过
IEntityTypeConfiguration<T>在独立配置类中显式声明映射,杜绝领域层污染;
- 契约层实体类统一标注来自
- 事务发件箱一体化:无论是
SqlSugarUnitOfWork还是EfCoreUnitOfWork,均接入 DotNetCore.CAP 事务拦截,确保领域事件派发与数据库事务物理原子绑定。
3. 依赖注入与组合根装配
在宿主组合根中,开发者只需声明一行扩展即可切换主数据引擎:
// 选项 A:使用 SqlSugar 作为核心引擎(推荐默认)builder.Services.AddBitzOrcasSqlSugar(builder.Configuration);
// 选项 B:使用 EF Core 作为核心引擎builder.Services.AddBitzOrcasEfCore(builder.Configuration);
// 叠加:为只读查询通道注入 Dapper 连接工厂builder.Services.AddBitzOrcasDapper(builder.Configuration);4. 相关架构决策与进阶推荐 (Related Deep Dives)
- EF Core 实战:EF Core 同构映射与 CAP 事务发件箱实践
- Dapper 实战:Dapper 只读连接池与极限查询优化
- 决策溯源:ADR 0302:多 ORM 适配器同构设计规范