La infraestructura System.Transactions proporciona un modelo de programación explícito según la clase Transaction, así como un modelo de programación implícito utilizando la clase TransactionScope, en la que la infraestructura administra automáticamente las transacciones.
Al crear una instancia de TransactionScope mediante la instrucción new, el administrador de transacciones determina en qué transacción va a participar. Una vez determinada, el ámbito siempre participa en esa transacción. La decisión se basa en dos factores: si está presente una transacción de ambiente y el valor del parámetro TransactionScopeOption del constructor. La transacción de ambiente es aquélla en la que se ejecuta el código. Puede obtener una referencia a la transacción de ambiente llamando a la propiedad Current estática de la clase Transaction. Para obtener más información sobre la utilización de este parámetro, consulte la sección sobre administración del flujo de transacciones del tema Implementar una transacción implícita con el ámbito de transacción.
Si no se produce ninguna excepción dentro del ámbito de la transacción (es decir, entre la inicialización del objeto TransactionScope y la llamada de su método Dispose), entonces se permite que la transacción en la que participa el ámbito continúe. Si aparece una excepción dentro del ámbito de la transacción, se deshará la transacción en la que participa.
Cuando la aplicación termina todo el trabajo que tiene que llevar a cabo en una transacción, debe llamar al método Complete sólo una vez para notificar al administrador de transacciones que la transacción se puede confirmar. Si no se puede llamar a este método se anula la transacción.
Una llamada al método Dispose marca el fin del ámbito de la transacción. Las excepciones que aparecen después de llamar a este método quizá no afecten a la transacción.
Si modifica el valor de Current dentro de un ámbito, se produce una excepción cuando se llama al método Dispose. Sin embargo, al final del ámbito, se restaura el valor anterior. Además, si se llama a Dispose en Current dentro del ámbito de transacción que creó la transacción, la transacción se anula al final del ámbito