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(); }