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}");
 }
Exemplo n.º 2
0
        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));
        }