コード例 #1
0
        public void SaveEventStream(EventStream eventStream)
        {
            Guard.AgainstNull(eventStream, "eventStream");

            if (eventStream.Removed)
            {
                Remove(eventStream.Id);

                return;
            }

            eventStream.ConcurrencyInvariant(_databaseGateway.GetScalarUsing <int>(_queryFactory.GetVersion(eventStream.Id)));

            if (eventStream.HasSnapshot)
            {
                using (var stream = _serializer.Serialize(eventStream.Snapshot.Data))
                {
                    _databaseGateway.ExecuteUsing(_queryFactory.SaveSnapshot(eventStream.Id, eventStream.Snapshot, stream.ToBytes()));
                }
            }

            foreach (var @event in eventStream.NewEvents())
            {
                using (var stream = _serializer.Serialize(@event.Data))
                {
                    _databaseGateway.ExecuteUsing(_queryFactory.AddEvent(eventStream.Id, @event, stream.ToBytes()));
                }
            }

            eventStream.CommitVersion();
        }