Ejemplo n.º 1
0
        public async Task <TAggregate> Load(string aggregateId)
        {
            var aggregate = new TAggregate();

            var streamName = _streamNameProvider.GetStreamName(Type, aggregateId);

            var events = await _eventPersistenceClient.Load(streamName, SubscribedEventTypes);

            if (events.Any())
            {
                aggregate.Load(events);
            }

            return(aggregate);
        }
Ejemplo n.º 2
0
        public async Task concurrent_append_to_stream_events_should_be_ordered()
        {
            var existingCar = await _aggregateRootRepository.GetAsync(_fakeCarId);


            var taskList = new Task[30];

            for (int i = 0; i < 30; i++)
            {
                taskList[i] = Task.Run(() =>
                {
                    try
                    {
                        WithUnitOfWorkAsync(async() =>
                        {
                            Car.ChangeName(existingCar.Value, $"Fake-{i.ToString()}");
                        }).ConfigureAwait(false).GetAwaiter().GetResult();
                    }
                    catch
                    {
                    }
                });
            }

            await Task.WhenAll(taskList);

            var streamId = _streamNameProvider.GetStreamName(typeof(CarState), _fakeCarId);

            var streamEvents = await _cosmosDBConnection.ReadStreamEventsForwardAsync(streamId, 1, 1000);

            var eventCount = streamEvents.Value.Events.Length;

            var distinctedCount = streamEvents.Value.Events.ToList().Select(e => e.Position)
                                  .Distinct()
                                  .Count();

            eventCount.Should().Be(distinctedCount);
        }