コード例 #1
0
ファイル: UnitOfWorkExtension.cs プロジェクト: Souing/CodeBak
        /// <summary>
        /// UnitOfWork联合提交(包含处理领域事件)扩展方法
        /// </summary>
        /// <param name="unitOfWork">工作单元实例</param>
        public static void UnitedCommit(this IUnitOfWork unitOfWork)
        {
            try
            {
                //开启事务
                using (TransactionScope scope = new TransactionScope())
                {
                    //提交工作单元
                    unitOfWork.Commit();

                    //处理领域事件
                    EventMediator.HandleUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
            }
            catch
            {
                //不参与事务
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    //回滚工作单元
                    unitOfWork.RollBack();

                    //清空未处理的领域事件
                    EventMediator.ClearUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
                throw;
            }
        }
コード例 #2
0
        /// <summary>
        /// 工作单元联合处理领域事件提交
        /// </summary>
        /// <param name="unitOfWork">工作单元实例</param>
        /// <remarks>采用分布式事务</remarks>
        public static async Task DistributedCommitAsync(this IUnitOfWork unitOfWork)
        {
            try
            {
                //开启事务
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, AsyncFlowOption))
                {
                    //提交工作单元
                    await unitOfWork.CommitAsync();

                    //处理领域事件
                    await EventMediator.HandleUncompletedEventsAsync();

                    //事务完成
                    scope.Complete();
                }
            }
            catch
            {
                //不参与事务
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress, AsyncFlowOption))
                {
                    //回滚工作单元
                    unitOfWork.RollBack();

                    //清空未处理的领域事件
                    EventMediator.ClearUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
                throw;
            }
        }
コード例 #3
0
ファイル: UnitOfWorkExtension.cs プロジェクト: Souing/CodeBak
        /// <summary>
        /// UnitOfWork集联合提交(包含处理领域事件)扩展方法
        /// </summary>
        /// <param name="unitOfWorks">工作单元实例集</param>
        public static void UnitedCommit(this IEnumerable <IUnitOfWork> unitOfWorks)
        {
            #region # 验证参数

            if (unitOfWorks == null)
            {
                throw new ArgumentNullException("unitOfWorks", "工作单元实例集不可为空!");
            }

            #endregion

            unitOfWorks = unitOfWorks.ToArray();

            try
            {
                //开启事务
                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (IUnitOfWork unitOfWork in unitOfWorks)
                    {
                        //提交工作单元
                        unitOfWork.Commit();
                    }

                    //处理领域事件
                    EventMediator.HandleUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
            }
            catch
            {
                //不参与事务
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    //回滚工作单元
                    foreach (IUnitOfWork unitOfWork in unitOfWorks)
                    {
                        //提交工作单元
                        unitOfWork.Commit();
                    }

                    //清空未处理的领域事件
                    EventMediator.ClearUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
                throw;
            }
        }
コード例 #4
0
        /// <summary>
        /// 工作单元联合处理领域事件提交
        /// </summary>
        /// <param name="unitOfWork">工作单元实例</param>
        /// <remarks>采用本地事务</remarks>
        public static async Task UnitedCommitAsync(this IUnitOfWork unitOfWork)
        {
            try
            {
                if (unitOfWork.GetCurrentTransaction() == null)
                {
                    using (DbTransaction dbTransaction = unitOfWork.BeginTransaction())
                    {
                        //提交工作单元
                        await unitOfWork.CommitAsync();

                        //处理领域事件
                        await EventMediator.HandleUncompletedEventsAsync();

                        //提交事务
                        dbTransaction.Commit();
                    }
                }
                else
                {
                    //提交工作单元
                    await unitOfWork.CommitAsync();

                    //处理领域事件
                    await EventMediator.HandleUncompletedEventsAsync();
                }
            }
            catch
            {
                //不参与事务
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress, AsyncFlowOption))
                {
                    //回滚工作单元
                    unitOfWork.RollBack();

                    //清空未处理的领域事件
                    EventMediator.ClearUncompletedEvents();

                    //事务完成
                    scope.Complete();
                }
                throw;
            }
        }