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();
        }
Пример #2
0
        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);
        }