/// <summary>
		/// Enlists in a transaction.
		/// </summary>
		/// <param name="option">An enlistment option.</param>
		/// <param name="timeout">A transaction timeout.</param>
		/// <returns>The enlisted transaction.</returns>
		public async Task<ITransaction> Enlist(EnlistmentOption option, TimeSpan timeout)
		{
			TransactionScopeOption transactionScopeOption = EnlistmentOptionPairMapper.Instance.Map(option);

			return await Task.Run(() =>
				{
					var transactionScope = new TransactionScope(transactionScopeOption, timeout);

					return new TransactionScopeTransaction(transactionScope);
				});
		}
		/// <summary>
		/// Enlists in a transaction.
		/// </summary>
		/// <param name="option">An enlistment option.</param>
		/// <param name="isolationLevel">A transaction isolation level.</param>
		/// <param name="timeout">A transaction timeout.</param>
		/// <returns>The enlisted transaction.</returns>
		public async Task<ITransaction> Enlist(EnlistmentOption option, IsolationLevel isolationLevel, TimeSpan timeout)
		{
			TransactionScopeOption transactionScopeOption = EnlistmentOptionPairMapper.Instance.Map(option);
			var transactionOptions = new TransactionOptions
				{
					IsolationLevel = IsolationLevelPairMapper.Instance.Map(isolationLevel),
					Timeout = timeout
				};

			return await Task.Run(() =>
				{
					var transactionScope = new TransactionScope(transactionScopeOption, transactionOptions);

					return new TransactionScopeTransaction(transactionScope);
				});
		}
		/// <summary>
		/// Enlists in a transaction that takes no action whether it is committed or rolled back.
		/// </summary>
		/// <param name="option">An enlistment option.</param>
		/// <param name="isolationLevel">A transaction isolation level.</param>
		/// <param name="timeout">A transaction timeout.</param>
		/// <returns>The enlisted transaction.</returns>
		public Task<ITransaction> Enlist(EnlistmentOption option, IsolationLevel isolationLevel, TimeSpan timeout)
		{
			return Task.FromResult<ITransaction>(new NullTransaction());
		}
		/// <summary>
		/// Enlists in a transaction that takes no action whether it is committed or rolled back.
		/// </summary>
		/// <param name="option">An enlistment option.</param>
		/// <returns>The enlisted transaction.</returns>
		public Task<ITransaction> Enlist(EnlistmentOption option)
		{
			return Task.FromResult<ITransaction>(new NullTransaction());
		}