public async Task SaveEventAsync <TAggregate>(IDomainEvent @event) where TAggregate : IAggregateRoot { var aggregateDocument = await _aggregateRepository.GetDocumentAsync(@event.AggregateRootId.ToString()); if (aggregateDocument == null) { var newAggregateDocument = _aggregateDocumentFactory.CreateAggregate <TAggregate>(@event); await _aggregateRepository.CreateDocumentAsync(newAggregateDocument); } var currentVersion = await _eventRepository.GetCountAsync(d => d.AggregateId == @event.AggregateRootId); var eventDocument = _eventDocumentFactory.CreateEvent(@event, currentVersion + 1); await _eventRepository.CreateDocumentAsync(eventDocument); }