public async Task Save(AggregateRoot aggregate) { var uncommittedChanges = aggregate.GetUncommittedChanges(); var version = aggregate.Version; foreach (var @event in uncommittedChanges) { version++; if (version > 2) { if (version % 3 == 0) { var originator = (IOriginator)aggregate; var memento = originator.GetMemento(); memento.Version = version; await SaveMemento(memento).ConfigureAwait(false); } } @event.Version = version; aggregate.Version = version; if (version == 0) { var ag = await _aggregateRepository.Create(_aggregateMapper.ToProviderEntity(aggregate)).ConfigureAwait(false); @event.AggregateId = ag.Id; } else { var aggregateRoots = await _aggregateRepository.FindByAsync(x => x.Id == aggregate.Id).ConfigureAwait(false); var aggregateRoot = aggregateRoots.FirstOrDefault(); if (aggregateRoot == null) { throw new NullReferenceException(); } aggregateRoot.Version = version; await _aggregateRepository.Update(aggregateRoot).ConfigureAwait(false); } await _eventRepository.Create(_eventMapper.ToProviderEntity(@event)).ConfigureAwait(false); } foreach (var @event in uncommittedChanges) { var desEvent = Converter.ChangeTo(@event, @event.GetType()); await _eventBus.Publish(desEvent).ConfigureAwait(false); } }
public async void UserCategoryCreateCommandStoresAggregateRootInEventStore() { //Arrange var catName = "Test Category 345"; var command = new UserCategoryCreateCommand(catName); //Act await _commandBus.Send(command); var agg = (await _aggregateRepository.FindByAsync(x => x.Id == 1)).FirstOrDefault(); //Assert Assert.IsNotNull(agg); Assert.AreEqual(0, agg.Version); }