public async Task Send(SagaConsumeContext <TSaga, TMessage> context) { var instance = context.Saga; if (_logger.IsDebugEnabled) { _logger.DebugFormat("SAGA: {0}:{1} Added {2}", TypeMetadataCache <TSaga> .ShortName, instance.CorrelationId, TypeMetadataCache <TMessage> .ShortName); } SagaConsumeContext <TSaga, TMessage> proxy = new EventStoreSagaConsumeContext <TSaga, TMessage>(_connection, context, instance); await _next.Send(proxy).ConfigureAwait(false); if (!proxy.IsCompleted) { await _connection.SaveEvents( instance.StreamName, instance.GetChanges(), instance.ExpectedVersion, new EventMetadata { CorrelationId = instance.CorrelationId, CausationId = context.MessageId }); } }
public static Task PersistSagaInstance <T>( this IEventStoreConnection connection, T saga, ConsumeContext context, GetEventMetadata <T> getEventMetadata ) where T : class, IEventSourcedSaga => connection.SaveEvents( saga.StreamName, saga.GetChanges().Select(x => (x, getEventMetadata(saga, context, x))),