protected virtual void CreateTemporaryTableIfNecessary(IQueryable persister, ISessionImplementor session)
        {
            // Don't really know all the codes required to adequately decipher returned ADO exceptions here.
            // simply allow the failure to be eaten and the subsequent insert-selects/deletes should fail
            IIsolatedWork work = new TmpIdTableCreationIsolatedWork(persister, log, session);

            if (ShouldIsolateTemporaryTableDDL())
            {
                if (Factory.Settings.IsDataDefinitionInTransactionSupported)
                {
                    Isolater.DoIsolatedWork(work, session);
                }
                else
                {
                    Isolater.DoNonTransactedWork(work, session);
                }
            }
            else
            {
                using (var dummyCommand = session.ConnectionManager.CreateCommand())
                {
                    work.DoWork(dummyCommand.Connection, dummyCommand.Transaction);
                    session.ConnectionManager.AfterStatement();
                }
            }
        }
        protected virtual async Task CreateTemporaryTableIfNecessaryAsync(IQueryable persister, ISessionImplementor session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            // Don't really know all the codes required to adequately decipher returned ADO exceptions here.
            // simply allow the failure to be eaten and the subsequent insert-selects/deletes should fail
            IIsolatedWork work = new TmpIdTableCreationIsolatedWork(persister, log, session);

            if (ShouldIsolateTemporaryTableDDL())
            {
                if (Factory.Settings.IsDataDefinitionInTransactionSupported)
                {
                    await(Isolater.DoIsolatedWorkAsync(work, session, cancellationToken)).ConfigureAwait(false);
                }
                else
                {
                    await(Isolater.DoNonTransactedWorkAsync(work, session, cancellationToken)).ConfigureAwait(false);
                }
            }
            else
            {
                using (var dummyCommand = await(session.ConnectionManager.CreateCommandAsync(cancellationToken)).ConfigureAwait(false))
                {
                    await(work.DoWorkAsync(dummyCommand.Connection, dummyCommand.Transaction, cancellationToken)).ConfigureAwait(false);
                    session.ConnectionManager.AfterStatement();
                }
            }
        }
		protected virtual void CreateTemporaryTableIfNecessary(IQueryable persister, ISessionImplementor session)
		{
			// Don't really know all the codes required to adequately decipher returned ADO exceptions here.
			// simply allow the failure to be eaten and the subsequent insert-selects/deletes should fail
			IIsolatedWork work = new TmpIdTableCreationIsolatedWork(persister, log, session);
			if (ShouldIsolateTemporaryTableDDL())
			{
				if (Factory.Settings.IsDataDefinitionInTransactionSupported)
				{
					Isolater.DoIsolatedWork(work, session);
				}
				else
				{
					Isolater.DoNonTransactedWork(work, session);
				}
			}
			else
			{
				work.DoWork(session.ConnectionManager.GetConnection(), null);
				session.ConnectionManager.AfterStatement();
			}
		}