Transacciones entre ensamblados

16/01/2009 - 13:44 por Guillermo Peralta | Informe spam
Buen día.. se me presenta el siguiente caso

En un ensamblado por ejemplo Datos1 tengo un metodo para guardar registros
en la BD
En otro ensablado Datos2 tengo otro metodo para guardar otros registros.

En ambos casos cada clase se encarga de abrir y cerrar la conexion con la BD

Desde la aplicación tengo referenciado a ambos ensamblados y si llamo a cada
uno por separado no hay problema, pero necesito que los dos formen parte de
una misma operacion, es decir necesito realizar una transacción.

La pregunta es si este es el caso para utilizar transacciones distribuidas o
si se puede resolver de otra manera, el problema que tengo es que cada clase
abre y cierra una conexion.. aunque a lo mejor me estoy perdiendo de algo..

Gracias..



Guillermo Peralta
 

Leer las respuestas

#1 Alberto Poblacion
16/01/2009 - 17:01 | Informe spam
"Guillermo Peralta" @SPAM.com.ar> wrote in message
news:
Buen día.. se me presenta el siguiente caso

En un ensamblado por ejemplo Datos1 tengo un metodo para guardar registros
en la BD
En otro ensablado Datos2 tengo otro metodo para guardar otros registros.

En ambos casos cada clase se encarga de abrir y cerrar la conexion con la
BD

Desde la aplicación tengo referenciado a ambos ensamblados y si llamo a
cada uno por separado no hay problema, pero necesito que los dos formen
parte de una misma operacion, es decir necesito realizar una transacción.

La pregunta es si este es el caso para utilizar transacciones distribuidas
o si se puede resolver de otra manera, el problema que tengo es que cada
clase abre y cierra una conexion.. aunque a lo mejor me estoy perdiendo de
algo..



Si las dos transacciones se realizan sobre el mismo servidor sql, es
preferible que hagas una transacción local que es mucho más eficiente que
una transacción distribuida, ya que así te evitas tener que utilizar el DTC
y que se haga un Commit en dos fases.

Para ello puedes usar un SqlTransaction (que sólo funciona si las dos
operaciones utilizan la misma conexión), o usar un objeto TransactionScope
que es muy listo y te realiza una transacción local si las dos conexiones
van a parar al mismo servidor, y automáticamente te la escala a transacción
distribuída en caso de que no se pueda hacer local.

Preguntas similares