public static async Task PersistCommitAsync(
            this IEventStoreConnection connection, Commit commit, int pageSize = 512)
        {
            var expectedVersion = commit.Version - commit.Events.Count();

            var expectedEventStreamVersion = expectedVersion == 0
                ? ExpectedVersion.NoStream
                : expectedVersion;

            if (commit.Events.Count < pageSize)
            {
                await connection.AppendToStreamAsync(commit.StreamId, expectedEventStreamVersion, commit.Events)
                                .ConfigureAwait(false);
            }
            else
            {
                var transaction = await connection.StartTransactionAsync(commit.StreamId, expectedEventStreamVersion)
                                                  .ConfigureAwait(false);

                for (var i = 0; i < commit.Events.Count; i += pageSize)
                {
                    await transaction.WriteAsync(commit.Events.Skip(i).Take(pageSize))
                                     .ConfigureAwait(false);
                }

                await transaction.CommitAsync()
                                 .ConfigureAwait(false);
            }
        }
Пример #2
0
 public static WriteResult AppendToStream(this IEventStoreConnection con, string stream, int expectedVersion, IEnumerable<EventData> events, UserCredentials userCredentials = null)
 {
     var task = con.AppendToStreamAsync(stream, expectedVersion, events, userCredentials);
     task.Wait();
     return task.Result;
 }