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