private async Task SaveAsync(IAggregate aggregate, int expectedStreamRevision, string causationId, string conversationId) { if (aggregate == null) { throw new ArgumentNullException(nameof(aggregate)); } foreach (DomainEvent uncommittedEvent in aggregate.UncommittedEvents) { EventStoreMessage eventStoreMessage = new EventStoreMessage(uncommittedEvent.EventId, uncommittedEvent.Body); eventStoreMessage.Headers.Add(EventStoreMessageHeaderKey.EventStreamId, aggregate.EventStreamId); if (!string.IsNullOrWhiteSpace(causationId)) { eventStoreMessage.Headers.Add(EventStoreMessageHeaderKey.CausationId, causationId); } if (!string.IsNullOrWhiteSpace(conversationId)) { eventStoreMessage.Headers.Add(EventStoreMessageHeaderKey.ConversationId, conversationId); } this.eventStoreProvider.AppendEvents(aggregate.EventStreamId, eventStoreMessage); } int committedEvents = await this.eventStoreProvider.CommitEventsAsync(aggregate.EventStreamId, expectedStreamRevision).ConfigureAwait(false); aggregate.EventStreamRevision += committedEvents; aggregate.UncommittedEvents.Clear(); }
public void AppendEvents(string eventStreamId, params object[] messages) { if (messages == null) { throw new ArgumentNullException(nameof(messages)); } EventStoreMessage[] eventStoreMessages = new EventStoreMessage[messages.Length]; for (int i = 0; i < messages.Length; i++) { eventStoreMessages[i] = new EventStoreMessage(Guid.NewGuid(), messages[i]); } this.AppendEvents(eventStreamId, eventStoreMessages); }