コード例 #1
0
        public async Task Invoke(HttpContext httpContext)
        {
            using (var uow = _unitOfWorkManager.Create())
            {
                await _next(httpContext);

                await uow.SaveChangesAsync();
            }
        }
コード例 #2
0
        private async void LoadDataAsync(string firstName, string middleName, string lastName)
        {
            using (Busy.GetTicket())
            {
                _unitOfWork = _unitOfWorkManager.Create();
                var staffingResource = await _unitOfWork.StaffingResourceFactory.CreateAsync();

                _unitOfWorkManager.Add(staffingResource.Id, _unitOfWork);
                staffingResource.FirstName  = firstName;
                staffingResource.MiddleName = middleName;
                staffingResource.LastName   = lastName;
                Start(staffingResource.Id, EditMode.Edit);
            }
        }
コード例 #3
0
ファイル: UnitOfWorkFilter.cs プロジェクト: MiCake/MiCake
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!ActionDescriptorHelper.IsControllerActionDescriptor(context.ActionDescriptor))
            {
                await next();

                return;
            }

            var controllerActionDes   = ActionDescriptorHelper.AsControllerActionDescriptor(context.ActionDescriptor);
            UnitOfWorkOptions options = _miCakeAspNetUowOption.RootUowOptions;

            if (options == null)
            {
                // create default uow options.
                var currentScope = context.HttpContext.RequestServices as IServiceScope;
                options = new UnitOfWorkOptions()
                {
                    Scope        = UnitOfWorkScope.Required,
                    ServiceScope = currentScope
                };
            }

            //has disableTransactionAttribute
            var actionMehtod        = ActionDescriptorHelper.GetActionMethodInfo(context.ActionDescriptor);
            var hasDisableAttribute = MiCakeUowHelper.IsDisableTransaction(context.Controller.GetType()) ||
                                      MiCakeUowHelper.IsDisableTransaction(actionMehtod);

            //has match action key word
            var hasMatchKeyWord = _miCakeAspNetUowOption.KeyWordToCloseTransaction.Any(keyWord =>
                                                                                       controllerActionDes.ActionName.ToUpper().StartsWith(keyWord.ToUpper()));

            options.Scope = hasDisableAttribute || hasMatchKeyWord ? UnitOfWorkScope.Suppress : options.Scope;

            using var unitOfWork = _unitOfWorkManager.Create(options);
            var result = await next();

            if (Succeed(result))
            {
                await unitOfWork.SaveChangesAsync();
            }
        }
コード例 #4
0
ファイル: UnitOfWorkFilter.cs プロジェクト: wrsxinlang/MiCake
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!ActionDescriptorHelper.IsControllerActionDescriptor(context.ActionDescriptor))
            {
                await next();

                return;
            }

            var controllerActionDes   = ActionDescriptorHelper.AsControllerActionDescriptor(context.ActionDescriptor);
            UnitOfWorkOptions options = _miCakeAspNetUowOption.RootUowOptions ?? new UnitOfWorkOptions();

            if (options.Scope != UnitOfWorkScope.Suppress)
            {
                //has disableTransactionAttribute
                var actionMehtod        = ActionDescriptorHelper.GetActionMethodInfo(context.ActionDescriptor);
                var hasDisableAttribute = MiCakeUowHelper.IsDisableTransaction(context.Controller.GetType()) ||
                                          MiCakeUowHelper.IsDisableTransaction(actionMehtod);

                //has match action key word
                var hasMatchKeyWord = _miCakeAspNetUowOption.KeyWordToCloseTransaction.Any(keyWord =>
                                                                                           controllerActionDes.ActionName.ToUpper().StartsWith(keyWord.ToUpper()));

                bool needCloseTransaction = hasDisableAttribute || hasMatchKeyWord;
                options.Scope = needCloseTransaction ? UnitOfWorkScope.Suppress : UnitOfWorkScope.Required;
            }

            using (var unitOfWork = _unitOfWorkManager.Create(options))
            {
                var result = await next();

                if (Succeed(result))
                {
                    await unitOfWork.SaveChangesAsync();
                }
            }
        }