TransactionScope completado prematuramente

Tengo un bloque de código que se ejecuta dentro de un TransactionScope y dentro de este bloque de código hago varias llamadas a la base de datos. Selecciona, actualiza, crea y elimina toda la gama. Cuando ejecuto mi eliminación, la ejecuto usando un método de extensión del SqlCommand que volverá a enviar automáticamente la consulta si se interrumpe, ya que esta consulta podría llegar a un punto muerto.

Creo que el problema ocurre cuando se llega a un punto muerto y la función intenta volver a enviar la consulta. Este es el error que recibo:

La transacción asociada con la conexión actual se ha completado pero no se ha eliminado. La transacción debe desecharse antes de que la conexión pueda usarse para ejecutar sentencias SQL.

Este es el código simple que ejecuta la consulta (todo el código siguiente se ejecuta dentro del uso de TransactionScope):

using (sqlCommand.Connection = new SqlConnection(ConnectionStrings.App))
{
    sqlCommand.Connection.Open();
    sqlCommand.ExecuteNonQueryWithDeadlockHandling();
}

Aquí está el método de extensión que vuelve a enviar la consulta bloqueada:

public static class SqlCommandExtender
{
    private const int DEADLOCK_ERROR = 1205;
    private const int MAXIMUM_DEADLOCK_RETRIES = 5;
    private const int SLEEP_INCREMENT = 100;

    public static void ExecuteNonQueryWithDeadlockHandling(this SqlCommand sqlCommand)
    {
        int count = 0;
        SqlException deadlockException = null;

        do
        {
            if (count > 0) Thread.Sleep(count * SLEEP_INCREMENT);
            deadlockException = ExecuteNonQuery(sqlCommand);
            count++;
        }
        while (deadlockException != null && count < MAXIMUM_DEADLOCK_RETRIES);

        if (deadlockException != null) throw deadlockException;
    }

    private static SqlException ExecuteNonQuery(SqlCommand sqlCommand)
    {
        try
        {
            sqlCommand.ExecuteNonQuery();
        }
        catch (SqlException exception)
        {
            if (exception.Number == DEADLOCK_ERROR) return exception;
            throw;
        }

        return null;
    }
}

El error ocurre en la línea:

sqlCommand.ExecuteNonQuery();

Respuestas a la pregunta(7)

Su respuesta a la pregunta