Skip to content
bitzorcas
中EN

Concept

多 ORM 双引擎架构与选型矩阵

深入解析 BitzOrcas.Modern 多持久化引擎架构:SqlSugar、EF Core、Dapper 与 Mongo 的职责边界、选型矩阵与双引擎并存规范。

Last updated

多 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 持久化适配层CQRS 请求分流

业务写命令 (Commands)

业务读查询 (Queries)

审计与非结构化日志 (Audit / Logs)

BitzOrcas.Infrastructure.SqlSugar
(主推写引擎:CodeFirst、分表、自动补列)

BitzOrcas.Infrastructure.EfCore
(备选写引擎:复杂实体图、官方契约对齐)

BitzOrcas.Infrastructure.Dapper
(极限读引擎:只读连接池、多表复杂报表)

BitzOrcas.Infrastructure.Mongo
(文档归档引擎:海量审计、非结构化 Payload)

SQL Server / PostgreSQL 主库 (Write DB)

只读从库 / Read Replica

MongoDB 归档集群

引擎特性与技术选型权衡表

持久化引擎核心优势团队适用场景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):

  1. 基类统一:所有聚合根继承 TenantAggregateRoot<TId> 或 Entity<TId>;
  2. 中立元数据与 Fluent 双重保障:
    • 契约层实体类统一标注来自 BitzOrcas.Persistence.Metadata 的适配器中立元数据([BitzTable]、[BitzColumn]),保持 Contracts 层 100% ORM 中立,严禁直接依赖 SqlSugar 或 EF Core 特性;
    • 在持久化基础设施层,由源生成器自动物化适配,或在 EF Core 侧通过 IEntityTypeConfiguration<T> 在独立配置类中显式声明映射,杜绝领域层污染;
  3. 事务发件箱一体化:无论是 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);

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%