Example #1
0
        private void SaveDomainEvents()
        {
            var domainEventEntities = ChangeTracker.Entries <IAggregate>()
                                      .Where(po => po.Entity.GetUndispatchedEvents().Any())
                                      .Select(po => po.Entity)
                                      .ToList();

            var domainEvents = domainEventEntities
                               .SelectMany(dee => dee.GetUndispatchedEvents().Select(ev => new DomainEventRecord(ev)))
                               .ToList();

            OzzyLogger <IDomainModelTracing> .TraceVerboseMessageIfEnabled(() => $"Saving {domainEvents.Count} domain events");

            DomainEvents.AddRange(domainEvents);
            _eventsToSave.AddRange(domainEvents);
            foreach (var entity in domainEventEntities)
            {
                entity.ClearUndispatchedEvents();
            }

            var removedEntitiesEvents = ChangeTracker.Entries <IEntity>()
                                        .Where(dbe => dbe.State == EntityState.Deleted)
                                        .Select(po => new EntityRemovedEvent(po.Entity));

            var removedEntitiesDomainEvents = removedEntitiesEvents
                                              .Select(domainEvent => new DomainEventRecord(domainEvent))
                                              .ToList();

            OzzyLogger <IDomainModelTracing> .TraceVerboseMessageIfEnabled(() => $"Saving {removedEntitiesDomainEvents.Count} entity removed events");

            DomainEvents.AddRange(removedEntitiesDomainEvents);
            _eventsToSave.AddRange(removedEntitiesDomainEvents);
        }
Example #2
0
        private void PollData(CancellationToken stopRequested)
        {
            var events = GetEventsFromDurableStore();

            OzzyLogger <IDomainModelTracing> .LogFor <DomainEventsLoop>().Polling(events.Count());

            foreach (var e in events)
            {
                if (stopRequested.IsCancellationRequested)
                {
                    return;
                }
                AddEventToDisruptor(e);
            }
        }