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(); }
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); }