Ejemplo n.º 1
0
        public override IEnumerable <IEvent> Save <TAggregate>(TAggregate aggregate)
        {
            var tableName = aggregate.GetType().Name;

            var table = _tableClient.GetTableReference(tableName);

            table.CreateIfNotExists();

            var events = aggregate.UncommitedEvents().ToList();

            foreach (var evt in aggregate.UncommitedEvents())
            {
                var formattedVersion = evt.Version.ToString("D10");

                var tableEntity = new EventAzureTableEntity
                {
                    AggregateId  = aggregate.Id.ToString(),
                    PartitionKey = aggregate.Id.ToString(),
                    RowKey       = formattedVersion,
                    CreatedAt    = _timeProvider.GetCurrentTime().ToString("o"),
                    ClrType      = evt.GetType().AssemblyQualifiedName,
                    TypeName     = evt.GetType().Name,
                    Payload      = JsonConvert.SerializeObject(evt)
                };

                var insertOperation = TableOperation.Insert(tableEntity);

                try
                {
                    // Execute the insert operation.
                    table.Execute(insertOperation);
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("409"))
                    {
                        throw new AggregateConflictException(aggregate.Id, evt.Version);
                    }

                    throw;
                }
            }

            return(events);
        }
Ejemplo n.º 2
0
 private static IEvent DeserializeAzureEntity(EventAzureTableEntity tableEntity)
 {
     return(JsonConvert.DeserializeObject(tableEntity.Payload, Type.GetType(tableEntity.ClrType)) as IEvent);
 }