Updated 工作单元 (markdown)

2881099
2025-12-16 09:49:56 +08:00
parent 82f297b3ce
commit e9aacd6a11

@@ -33,6 +33,40 @@ using (var uow = fsql.CreateUnitOfWork())
参考:[在 asp.net core 中使用 TransactionalAttribute + UnitOfWorkManager 实现多种事务传播](DI-UnitOfWorkManager)
## 外部事务
```csharp
// 场景:已经有一个开启的 Connection 和 Transaction
using (var conn = new Microsoft.Data.SqlClient.SqlConnection("..."))
{
conn.Open();
using (var tran = conn.BeginTransaction())
{
// 1. 原生/Dapper 操作
// command.Transaction = tran;
// command.ExecuteNonQuery();
// 2. 桥接给 FreeSql
// 使用扩展方法创建适配器,传入现有的 tran
using (var uow = fsql.CreateUnitOfWork(tran))
{
// 在此 uow 下获取的仓储或 Orm都会使用传入的 tran
var repo = uow.GetRepository<MyEntity>();
repo.Insert(new MyEntity { Name = "FreeSql Insert" });
// 或者直接使用 Orm
uow.Orm.Insert(new MyEntity { Name = "Direct Orm Insert" }).ExecuteAffrows();
// 这里的 Commit 只会触发 FreeSql 的事件,不会提交物理事务
uow.Commit();
}
// 3. 真正的提交由最外层控制
tran.Commit();
}
}
```
## 接口定义
uow.GetOrBeginTransaction() 方法可获取事务对象。