2009-06-01 37 views

Respuesta

25

De hecho, hay una manera.

connection.EnlistTransaction(Transaction.Current) 

funciona y es imposible promover transacción distribuida si no es necesario (al contrario de lo que dice la documentación)

HTH

4

Para obtener una conexión en un TransactionScope, debe especificar 'Enlist=true' en su cadena de conexión y abrir la conexión en el alcance de ese objeto TransactionScope.

Puede usar SqlConnection.BeginTransaction en una conexión existente.

actualización: ¿Se puede utilizar BeginTransaction así:

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    SqlCommand command = connection.CreateCommand(); 
    SqlTransaction transaction; 

    // Start a local transaction. 
    transaction = connection.BeginTransaction("SampleTransaction"); 

    // Must assign both transaction object and connection 
    // to Command object for a pending local transaction 
    command.Connection = connection; 
    command.Transaction = transaction; 

    ... 
    ... 

} 
+0

La cosa es que la conexión se abre antes de la creación de instancias TransactionScope; de ahí el motivo de mi pregunta. –

+0

@Mitch, ¿la conexión.BeginTransaction ("SampleTransaction") promueve a una transacción distribuida (DTC) en cualquier escenario? Si lo hace, ¿cuáles son esos escenarios? – Baig

3

Después de más investigación, la respuesta a mi pregunta resultó ser:

No, la conexión tiene que ser abierto después de la El objeto TransactionScope está instanciado.

Cuestiones relacionadas