public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { int result = await base.SaveChangesAsync(cancellationToken).ConfigureAwait(false); // ignore events if no dispatcher provided if (_dispatcher == null) { return(result); } // dispatch events only if save was successful var entitiesWithEvents = ChangeTracker.Entries <EntityBase>() .Select(e => e.Entity) .Where(e => e.DomainEvents.Any()) .ToArray(); await _dispatcher.DispatchAndClearEvents(entitiesWithEvents); return(result); }