public void Add <T>(T aggregate) where T : class, TBase { if (aggregates.ContainsKey(aggregate.Id)) { throw new ArgumentException($"Duplicate aggregate root with ID '{aggregate.Id}' and type '{typeof(T).FullName}'"); } aggregates.Add(aggregate.Id, aggregate); Guid classId = entityTypeManager.GetClassInfoByClrType(aggregate.GetType()).Id; eventStore.AddStream(aggregate.Id); eventStore.SetStreamMetadata(aggregate.Id, new Dictionary <string, string>() { { AggregateEventStreamMetadataNames.ClassId, classId.ToString() } }); }
public void Add <T>(T aggregate) where T : class, IAggregateRoot { var esAggregate = GetEventSourcedAggregate(aggregate); if (aggregates.TryGetValue(aggregate.Id, out var existing)) { if (existing == aggregate) { return; } throw new ArgumentException($"Duplicate aggregate root with ID '{aggregate.Id}' and type '{typeof(T).FullName}'"); } aggregates.Add(aggregate.Id, esAggregate); Guid classId = entityTypeManager.GetClassInfoByClrType(aggregate.GetType()).Id; eventStore.AddStream(aggregate.Id); eventStore.SetStreamMetadata(aggregate.Id, new Dictionary <string, string>() { { AggregateEventStreamMetadataNames.ClassId, classId.ToString() } }); }