2010-06-21 13 views

Respuesta

2

Buena parte:

Se pueden realizar transacciones fuera del contexto de la base de datos. Inserte el registro en db. Escribir archivo en el disco.

lado malo:

requiere acceso MSDTC en la máquina cliente, donde se utiliza TransactionScope.

+2

¿No solo requiere acceso cuando se conecta a 2 o más servidores diferentes? Comienza ligero y luego se actualiza solo. –

+0

Exactamente. Lamentablemente, respuesta incorrecta. – TomTom

4

Algunas de las ventajas de MSDN:

de Subsidios TransactionScope

  • El código dentro del ámbito transaccional no sólo es transaccional, que también es promotable. La transacción comienza con el sistema LTM y .Transactions lo promocionará según sea necesario, de acuerdo con la naturaleza de su interacción con los recursos u objetos remotos.
  • El alcance es independiente del modelo de objeto de aplicación : cualquier parte del código puede usar TransactionScope y y convertirse en transaccional. Hay sin necesidad de clase base especial o atributos .
  • No hay necesidad de alistar recursos explícitamente con la transacción. Cualquier System.Transactions resource manager detectará la transacción ambiental creada por el alcance y automáticamente alistado.
  • En general, es un modelo de programación simple e intuitivo incluso para los escenarios complejos más que implican flujo de transacciones y anidamiento.
0

Sólo para añadir a/aclarar los puntos Incognito hace:

  • TransactionScopes hacen que la ejecución de transacciones ACID simples (es decir, lo que no es necesario escribir explícito "reducción" o código de limpieza)
  • TransactionScope puede coordinar recursos como bases de datos, colas de mensajes y sistemas de archivos transaccionales en una transacción
  • Re TransactionScopes son intuitivos: recursos como SQL, etc. detectarán automáticamente/sin problemas la transacción ambiental y se alistarán como disponibles.

El único lado 'malo' es que es necesario tener en cuenta que:

  • El nivel de aislamiento predeterminado de TransactionScope es READ SERIALIZABLE, que suele ser demasiado 'fuerte' y puede causar el bloqueo y deadlocking . Recomendaría usar ReadCommitted para la mayoría de las transacciones.
  • TransactionScope escalará una transacción a DTC si se usa más de una base de datos/más de una conexión simultánea/más de un recurso (por ejemplo, SQL y MSMQ) en un TransactionScope. Pero generalmente se puede evitar en escenarios de Single Single/Single Database al cerrar las conexiones antes de abrir una nueva (o mantener una conexión abierta durante todo el proceso, lo cual no es recomendable).
Cuestiones relacionadas