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));
        }
        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));
        }
        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);
        }