wanshenmean
3 天以前 64a2aa2301946f777659239247233e47ad1e3076
Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs
@@ -40,15 +40,17 @@
        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;
        }
@@ -98,6 +100,32 @@
            }
        }
        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)