Tim Van Wassenhove home

Earlier today we were confronted with the following OracleException: Unable to enlist in a distributed transaction. Our code (and accompanying tests) had been running fine for the last two weeks thus we expected there was a problem with the database. A member of the DBA team assurred us there was nothing wrong with the database. Finally we discovered that we had created a circular reference and thus the program ended up in an endless loop (well untill the database decided it had been enough anyway :p). Here is a simplified version of the problem

public void DoA() 
{
	using (TransactionScope scope = new TransactionScope()) 
	{
		using (OracleConnection con = new OracleConnection(connectionString)) 
		{
			con.Open();
			DoB();
			scope.Complete();
		}
	}
}

public void DoB() 
{
	using (TransactionScope scope = new TransactionScope()) 
	{
		using (OracleConnection con = new OracleConnection(connectionString)) 
		{
			con.Open();
			DoA();
			scope.Complete();
		}
	}
}

Without the use of TransactionScope this results in a Connection request timed out exception.