| | |
| | | |
| | | public UnitOfWork CreateUnitOfWork() |
| | | { |
| | | UnitOfWork uow = new UnitOfWork(); |
| | | uow.Logger = _logger; |
| | | uow.Db = _sqlSugarClient; |
| | | uow.Tenant = (ITenant)_sqlSugarClient; |
| | | uow.IsTran = true; |
| | | UnitOfWork uow = new UnitOfWork |
| | | { |
| | | Logger = _logger, |
| | | Db = _sqlSugarClient, |
| | | Tenant = _sqlSugarClient as ITenant, |
| | | IsTran = true |
| | | }; |
| | | |
| | | uow.Db.Open(); |
| | | uow.Tenant.BeginTran(); |
| | | |
| | | uow.Tenant?.BeginTran(); |
| | | |
| | | _logger.LogDebug("UnitOfWork Begin"); |
| | | return uow; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private readonly SemaphoreSlim _asyncLock = new SemaphoreSlim(1, 1); |
| | | |
| | | public async Task<WebResponseContent> BeginTranAsync(Func<Task<WebResponseContent>> funcAsync) |
| | | { |
| | | await _asyncLock.WaitAsync(); |
| | | try |
| | | { |
| | | BeginTran(); // 假设这是同步方法,启动事务 |
| | | WebResponseContent content = await funcAsync(); |
| | | if (content.Status) |
| | | CommitTran(); // 同步提交 |
| | | else |
| | | RollbackTran(); // 同步回滚 |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | _asyncLock.Release(); |
| | | } |
| | | } |
| | | |
| | | public void CommitTran() |
| | | { |
| | | lock (this) |