using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace zzz.Repository.UnitOfWork { public class UnitOfWork: IUnitOfWork { private readonly ISqlSugarClient _sqlSugarClient; private int _tranCount { get; set; } public UnitOfWork(ISqlSugarClient sqlSugarClient) { _sqlSugarClient = sqlSugarClient; _tranCount = 0; } /// /// 获取DB,保证唯一性 /// /// public SqlSugarScope GetDbClient() { // 必须要as,后边会用到切换数据库操作 // 因为注入的是 SqlSugarScope 所以这里可以转化成功 return _sqlSugarClient as SqlSugarScope; } public void BeginTran() { lock (this) { _tranCount++; GetDbClient().BeginTran(); } } public void CommitTran() { lock (this) { _tranCount--; if (_tranCount == 0) { try { GetDbClient().CommitTran(); } catch (Exception ex) { Console.WriteLine(ex.Message); GetDbClient().RollbackTran(); } } } } public void RollbackTran() { lock (this) { _tranCount--; GetDbClient().RollbackTran(); } } } }