static Task SaveSagaWithoutCorrelationProperty(IContainSagaData sagaData, SynchronizedStorageSession session)
        {
            var indexStream      = BuildSagaByIdStreamName(sagaData.GetType(), sagaData.Id);
            var stateChangeEvent = new EventData(Guid.NewGuid(), SagaDataEventType, true, sagaData.ToJsonBytes(), new byte[0]);

            return(session.AppendToStreamAsync(indexStream, ExpectedVersion.NoStream, stateChangeEvent));
        }
        static async Task SaveSagaWithCorrelationProperty(IContainSagaData sagaData, SagaCorrelationProperty correlationProperty, SagaPersisterAtomicOperations operations, SynchronizedStorageSession session)
        {
            var propertyValue    = correlationProperty.Value;
            var indexStream      = BuildSagaByIdStreamName(sagaData.GetType(), sagaData.Id);
            var dataStream       = BuildSagaDataStreamName(sagaData.GetType(), propertyValue);
            var stateChangeEvent = new EventData(Guid.NewGuid(), SagaDataEventType, true, sagaData.ToJsonBytes(), new byte[0]);

            await operations.CreateIndex(indexStream, dataStream).ConfigureAwait(false);

            await session.AppendToStreamAsync(dataStream, ExpectedVersion.NoStream, stateChangeEvent).ConfigureAwait(false);
        }
예제 #3
0
        /// <summary>
        /// Appends an event to the collection of events to be persisted at the end of message processing.
        /// </summary>
        public static Task AppendViaOutbox(this SynchronizedStorageSession session, string stream, int expectedVersion, params EventData[] events)
        {
            var outboxSession = session as OutboxEventStoreSynchronizedStorageSession;

            if (outboxSession == null)
            {
                throw new Exception("Atomic appends are not supported without the EventStore outbox.");
            }
            var links = events.Select(e => outboxSession.AddPersistenceOperation(stream, e)).ToArray();

            return(session.AppendToStreamAsync(stream, expectedVersion, links));
        }
        public Task Update(IContainSagaData sagaData, SynchronizedStorageSession session, ContextBag context)
        {
            var operations  = new SagaPersisterAtomicOperations(session);
            var versionInfo = operations.GetSagaVersion(sagaData.Id);

            var dataStream       = versionInfo.StreamName;
            var stateChangeEvent = new EventData(Guid.NewGuid(), SagaDataEventType, true, sagaData.ToJsonBytes(), new byte[0]);

            if (session.SupportsOutbox())
            {
                return(session.AppendViaOutbox(dataStream, versionInfo.Version, stateChangeEvent));
            }
            return(session.AppendToStreamAsync(dataStream, versionInfo.Version, stateChangeEvent));
        }