private void PublishEntityEvents(EntityEventReport changeReport) { foreach (var localEvent in changeReport.DomainEvents) { UnitOfWorkManager.Current?.AddOrReplaceLocalEvent( new UnitOfWorkEventRecord(localEvent.EventData.GetType(), localEvent.EventData, localEvent.EventOrder) ); } foreach (var distributedEvent in changeReport.DistributedEvents) { UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent( new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder) ); } }
protected virtual EntityEventReport CreateEventReport() { var eventReport = new EntityEventReport(); foreach (var entry in ChangeTracker.Entries().ToList()) { var generatesDomainEventsEntity = entry.Entity as IGeneratesDomainEvents; if (generatesDomainEventsEntity == null) { continue; } var localEvents = generatesDomainEventsEntity.GetLocalEvents()?.ToArray(); if (localEvents != null && localEvents.Any()) { eventReport.DomainEvents.AddRange( localEvents.Select( eventRecord => new DomainEventEntry( entry.Entity, eventRecord.EventData, eventRecord.EventOrder ) ) ); generatesDomainEventsEntity.ClearLocalEvents(); } var distributedEvents = generatesDomainEventsEntity.GetDistributedEvents()?.ToArray(); if (distributedEvents != null && distributedEvents.Any()) { eventReport.DistributedEvents.AddRange( distributedEvents.Select( eventRecord => new DomainEventEntry( entry.Entity, eventRecord.EventData, eventRecord.EventOrder) ) ); generatesDomainEventsEntity.ClearDistributedEvents(); } } return(eventReport); }