private async Task ProcessDomainEvents() { var aggregateRootType = typeof(AggregateRoot); var aggRootEntries = Context.ChangeTracker .Entries() .Select(e => e.Entity) .Where(e => e.GetType().IsSubclassOf(aggregateRootType)); foreach (var aggRoot in aggRootEntries) { foreach (var domainEvent in (aggRoot as AggregateRoot).Events) { await domainEventBus.Handle(domainEvent); if (domainEvent.Auditable) { await auditor.Audit(domainEvent); } } } }