public virtual async Task RunAsync(Func <Task> funcAsync)
        {
            EnsureNoContext();

            try
            {
                BeginContext();
                using (var transaction = BeginTransaction())
                {
                    await funcAsync();

                    await _contextFlushService.FlushChangesAsync(_contextService.GetCurrentContext());

                    CommitTransaction(transaction);
                }
            }
            finally
            {
                EndContext();
            }
        }