Transactions
Zongsoft.Data.Transaction 类与 Zongsoft.Data.Transactions 命名空间的职责和主要类型。
Zongsoft.Data.Transaction 提供核心类库中的轻量环境事务对象,事务状态、事务信息、事务阶段和事务参与登记类型位于 Zongsoft.Data.Transactions 命名空间。它用于在数据服务、批处理或跨组件操作中表达一段可提交或回滚的应用层事务。
主要职责
通过
Transaction.Current维护当前异步上下文中的环境事务。支持以
ReadCommitted()、RepeatableRead()、Serializable()等工厂方法创建常用隔离级别的事务。提供同步与异步提交/回滚,并在释放未提交事务时回滚。
通过
IEnlistment、EnlistmentContext和EnlistmentPhase支持事务参与者登记与阶段通知。为数据服务、批处理和跨组件操作提供统一事务抽象。
典型用法
Discussions 创建主题时把主记录、主题内容贴和作者统计放入事务。同步与异步完整用例见事务与一致性。
如果需要让组件感知事务提交或回滚,可实现 Zongsoft.Data.Transactions.IEnlistment 并登记到当前事务。登记对象会在事务完成时收到 Commit 或 Rollback 阶段通知。
相关资源
异步完成与环境作用域
下面是 Discussions 的真实异步插入钩子;Posting、Utility 和统计方法都来自模块本身。正文文件由 MutateContentAsync 在数据库操作失败时清理,它不是数据库事务自动回滚的资源。
异步数据操作可用 await using 管理事务,再等待 CommitAsync,让调用方观察真实完成或失败:
来源:src/Services/ThreadService.cs(节选;上下文见源文件)。
异步参与者通过 IEnlistment.OnEnlistAsync 接收完成通知。事务开始终结后,后续取消不会中止已经进行的提交/回滚;取消请求不能作为数据库未提交的证明。
DisposeAsync 会先退出当前环境事务作用域,再异步回滚未完成事务,防止旧作用域影响后续代码。它不会自动将任意 HTTP 请求、消息确认或外部系统操作纳入原子事务。
数据引擎中的连接、隔离和跨系统边界见事务与一致性。
最后更新于