/// <summary> /// Loads and returns an aggregate by id, from the store. /// </summary> public async Task <T> Load <T>(string aggregateId, CancellationToken cancellationToken = default) where T : Aggregate, new() { if (IsNullOrWhiteSpace(aggregateId)) { throw new ArgumentException("Value cannot be null or whitespace.", nameof(aggregateId)); } var stream = _getStreamName(typeof(T), aggregateId); var aggregate = new T(); var nextPageStart = 0L; do { var page = await _connection.ReadStreamEventsForwardAsync( stream, nextPageStart, MaxReadSize, false, _userCredentials); if (page.Events.Length > 0) { aggregate.Load( page.Events.Last().Event.EventNumber, page.Events.Select(re => _serializer.Deserialize( re.Event.Data, _typeMapper.GetType(re.Event.EventType) )).ToArray()); } nextPageStart = !page.IsEndOfStream ? page.NextEventNumber : -1; } while (nextPageStart != -1); Log.Debug("Loaded {aggregate} changes from stream {stream}", aggregate, stream); return(aggregate); }
public static object Deserialze(this ResolvedEvent resolvedEvent) { var dataType = TypeMapper.GetType(resolvedEvent.Event.EventType); var jsonData = Encoding.UTF8.GetString(resolvedEvent.Event.Data); var data = JsonConvert.DeserializeObject(jsonData, dataType); return(data); }