private async Task RemoveEventToBeProcessed(CqrsEventProcessedEvent request, System.Reflection.MethodInfo getRepositoryMethod, CancellationToken cancellationToken)
        {
            _logger.Debug($"Getting source entity repository. SourceTypeName: {request.SourceTypeName}");
            var     sourceEntityType             = Type.GetType(request.SourceTypeName);
            var     genericMethodForSourceEntity = getRepositoryMethod.MakeGenericMethod(sourceEntityType);
            dynamic sourceEntityRepository       = genericMethodForSourceEntity.Invoke(_cqrsRepositoryFactory, null);

            _logger.Debug($"Built {nameof(CqrsRepositoryFactory)}");
            using var uow = _unitOfWorkManager.Get();
            _logger.Debug($"Fetched source entity by Id. Id: {request.SourceId}");
            var cqrsEntity = await sourceEntityRepository.GetByIdAsync(request.SourceId, cancellationToken);

            var baseCqrsEntity = cqrsEntity as BaseCqrsEntity;

            _logger.Debug($"Fetched BaseCqrsEntity. Id: {request.SourceId}");
            var @event = baseCqrsEntity?.EventsToBeProcessed.FirstOrDefault(f => f.Id == request.Id);

            if (@event != null)
            {
                _logger.Debug($"Removing event. Id: {@event.Id}");
                baseCqrsEntity.RemoveEventToBeProcessed(@event);
                await sourceEntityRepository.UpdateAsync(cqrsEntity, cancellationToken);

                _logger.Debug($"Removed event");
            }
            uow.Commit();
        }
示例#2
0
        public async Task PurgeAsync(ICqrsEvent cqrsEvent, CancellationToken cancellationToken)
        {
            _logger.Debug($"Getting entity repository. TypeName: {cqrsEvent.SourceTypeName}");
            var sourceEntityType    = Type.GetType(cqrsEvent.SourceTypeName);
            var getRepositoryMethod = _cqrsRepositoryFactory.GetType().GetMethod("GetRepository");

            if (getRepositoryMethod != null)
            {
                var     genericMethodForSourceEntity = getRepositoryMethod.MakeGenericMethod(sourceEntityType);
                dynamic sourceEntityRepository       = genericMethodForSourceEntity.Invoke(_cqrsRepositoryFactory, null);
                _logger.Debug($"Built {nameof(CqrsRepositoryFactory)}");
                _logger.Debug($"Fetching entity by Id. Id: {cqrsEvent.SourceId}");
                using var uow = _unitOfWorkManager.Get();
                var cqrsEntity = await sourceEntityRepository.GetByIdAsync(cqrsEvent.SourceId, cancellationToken);

                var baseCqrsEntity = cqrsEntity as BaseCqrsEntity;
                _logger.Debug($"Fetched entity. Id: {cqrsEvent.SourceId}");
                var @event = baseCqrsEntity?.EventsToBeProcessed.FirstOrDefault(f => f.Id == cqrsEvent.Id);
                if (@event != null)
                {
                    _logger.Debug($"Removing event. Id: {@event.Id}");
                    baseCqrsEntity.RemoveEventToBeProcessed(@event);
                    await sourceEntityRepository.UpdateAsync(cqrsEntity, cancellationToken);

                    _logger.Debug("Removed event");
                }
                uow.Commit();
            }
        }
        public override TResponse Execute <TRequest, TResponse>(IRequest <TResponse> request,
                                                                Func <IRequest <TResponse>, TResponse> next)
        {
            _logger.Debug($"UnitOfWorkInterceptor started");
            var unitOfWorkOptions = _uowOptionsBuilder.Build(request);

            _logger.Debug($"About to start UoW with IsolationLevel: {unitOfWorkOptions.IsolationLevel.ToString()}");
            TResponse response;

            using (_unitOfWork = _unitOfWorkManager.Get(unitOfWorkOptions))
            {
                response = next.Invoke(request);
                _unitOfWork.Commit();
            }
            _unitOfWork = null;
            _logger.Debug($"UnitOfWorkInterceptor ended");
            return(response);
        }
        private async void LoadDataAsync(Guid staffingResourceId, EditMode editMode)
        {
            // Load the list of states once first, before we continue with starting the ViewModel
            // This is to ensure that the ComboBox binding doesn't goof up if the ItemSource is empty
            // The list of states is preloaded into each EntityManager cache, so this should be fast
            if (States == null)
            {
                var unitOfWork = _unitOfWorkManager.Get(Guid.Empty);
                var states     = await unitOfWork.States.AllAsync(q => q.OrderBy(s => s.Name));

                States = new BindableCollection <State>(states);
            }

            base.Start(staffingResourceId, editMode);
        }
        public override async Task <TResponse> ExecuteAsync <TRequest, TResponse>(TRequest request,
                                                                                  CancellationToken cancellationToken,
                                                                                  Func <TRequest, CancellationToken, Task <TResponse> > next)
        {
            _logger.Debug($"UnitOfWorkInterceptor started");
            var unitOfWorkOptions = _uowOptionsBuilder.Build(request as IRequest <TResponse>);

            _logger.Debug($"About to start UoW with IsolationLevel: {unitOfWorkOptions.IsolationLevel.ToString()}");
            TResponse response;

            using (_unitOfWork = _unitOfWorkManager.Get(unitOfWorkOptions))
            {
                response = await next.Invoke(request, cancellationToken);

                _unitOfWork.Commit();
            }
            _unitOfWork = null;
            _logger.Debug($"UnitOfWorkInterceptor ended");
            return(response);
        }