コード例 #1
0
		public void Should_be_able_to_handle_concurrency_invariant_check()
		{
			var stream = new EventStream(Guid.NewGuid(), 5, new List<Event>(), null);

			Assert.DoesNotThrow(() => stream.ConcurrencyInvariant(5));
			Assert.Throws<EventStreamConcurrencyException>(() => stream.ConcurrencyInvariant(10));
		}
コード例 #2
0
        public void Should_be_able_to_handle_concurrency_invariant_check()
        {
            var stream = new EventStream(Guid.NewGuid(), 5, new List <object>(), new Mock <IEventMethodInvoker>().Object);

            Assert.DoesNotThrow(() => stream.ConcurrencyInvariant(5));
            Assert.Throws <EventStreamConcurrencyException>(() => stream.ConcurrencyInvariant(10));
        }
コード例 #3
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();
        }