public async Task <T> GetByIdAsync <T>(Guid aggregateId) where T : AggregateRoot <Guid> { if (aggregateId == Guid.Empty) { throw new BadAggregateIdException(ErrorCode.BadAggregateId, nameof(aggregateId)); } var aggregate = _invoker.CreateInstanceOfAggregateRoot <T>(); if (aggregate == null) { throw new NullInstanceOfAggregateException(ErrorCode.NullInstanceOfAggregate, nameof(aggregate)); } var eventStoreItems = _dbSet.AsNoTracking().Where(e => e.AggregateId == aggregateId).AsQueryable(); if (!eventStoreItems.Any()) { return(await Task.FromResult <T>(null)); } var events = _eventStoreToEVent.RebuildDomainEvents(eventStoreItems); aggregate.LoadFromHistory(events); return(await Task.FromResult(aggregate)); }