public virtual void Run(Action action)
        {
            EnsureNoContext();

            try
            {
                BeginContext();
                using (var transaction = BeginTransaction())
                {
                    action();

                    _contextFlushService.FlushChanges(_contextService.GetCurrentContext());
                    CommitTransaction(transaction);
                }
            }
            finally
            {
                EndContext();
            }
        }