public Task <long> SaveEvent(string aggregateName, AggregateEventBase @event) { if (_aggregateEvents.TryGetValue(aggregateName, out var entity)) { lock (entity.SyncRoot) { var id = entity.Values.Count == 0 ? 1 : entity.Values.Last().Id + 1; var aggregateType = _aggregateById[@event.AggregateId]; var aggregate = new AggregateEvent { Id = id, AggregateId = @event.AggregateId, AggregateVersion = @event.AggregateVersion, EventVersion = @event.EventVersion, RootEventId = @event.RootEventId, ParentEventId = @event.ParentEventId, Type = @event.Type, Data = @event.Data, Created = @event.Created, AggregateType = aggregateName }; entity.Values.Add(aggregate); return(Task.FromResult(id)); } } throw new InvalidOperationException($"Message=AggregateEvent not found for {aggregateName}"); }
public async Task <long> SaveEvent(string aggregateName, AggregateEventBase @event) { const string sql = @"insert into {0}_events(AggregateId, AggregateVersion, EventVersion, ParentEventId, RootEventId, Type, Data, Created) values (@AggregateId, @AggregateVersion, @EventVersion, @ParentEventId, @RootEventId, @Type, @Data, @Created) returning Id;"; using IDbConnection conn = Connection; return(await conn.ExecuteScalarAsync <long>(string.Format(sql, aggregateName), @event)); }