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);
    }