mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-07 17:00:52 +08:00
Updated 工作单元 (markdown)
34
工作单元.md
34
工作单元.md
@@ -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() 方法可获取事务对象。
|
||||
|
||||
Reference in New Issue
Block a user