/// <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);
            }
        }
示例#2
0
        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);
        }