/// <summary> /// Saves changes to the respective stream /// NOTES: Current implementation doesn't support cancellation token /// </summary> /// <param name="eventsToAdd"></param> /// <param name="snapshot"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override async Task <int> SaveChanges(ItemWithType[] eventsToAdd, TState snapshot, CancellationToken?cancellationToken) { checked { CheckDisposedState(); ConditionalWriteResult writeResult; writeResult = await eventStoreConnection.ConditionalAppendToStreamAsync( streamName, this.ConcurrencyId, eventsToAdd.Select(eventObject => eventObject.CreateEventData())) .ConfigureAwait(false); StreamAppendHelpers.CheckConditionalWriteResultStatus(writeResult, streamName); if (!writeResult.NextExpectedVersion.HasValue) { throw new InvalidOperationException("Eventstore data write outcome unexpected. NextExpectedVersion is null"); } await Initialize(); ConsiderSessionDisposed(); return((int)writeResult.NextExpectedVersion.Value); } }
private async Task SoftDeleteByEventImpl(TId selector, EventData softDeleteEvent) { var id = selector.ToString(); var expectedVersion = await GetLastEventNumber(id); var writeResult = await connection.ConditionalAppendToStreamAsync( id, expectedVersion, new[] { softDeleteEvent }) .ConfigureAwait(false); StreamAppendHelpers.CheckConditionalWriteResultStatus(writeResult, id); }