framework .net database tsql transactions

.net - transactionscope entity framework



Clase.NET TransactionScope y T-SQL TRAN COMMIT y ROLLBACK (4)

Estoy escribiendo una aplicación que requerirá varias inserciones, actualizaciones y eliminaciones para mi entidad comercial. Estoy utilizando la clase TransactionScope para garantizar que todos los procedimientos almacenados puedan confirmarse o retrotraerse como una sola unidad de trabajo.

Mi pregunta es: ¿debo usar COMMIT TRAN y ROLLBACK TRAN en cada uno de mis procedimientos almacenados si estoy usando la clase TransactionScope en mi biblioteca de clases .NET?


EN 2005 no es necesario, en 2000 yo lo haría, Además, generalmente pongo el workscope en un bloque "using".

Hay algunos problemas de rendimiento cuando se usa en 2000 y versiones anteriores en comparación con 2005.

Mira aquí

Gracias


No debería necesitar, debe ser manejado dentro de TransactionScope. Depende un poco de exactamente lo que está haciendo y cómo está manejando la transacción (explícita o implícita) Más AQUÍ


No, no necesita transacciones explícitas si usa TransactionScope para sus transacciones; sin embargo, es importante que establezca la Transaction Binding=Explicit Unbind; en la cadena de conexión. Los detalles completos están aquí , pero de lo contrario puede terminar recuperando las primeras operaciones y cometiendo las últimas (o más bien, ejecutándose fuera de cualquier transacción).


Si se alistó en TransactionScope o CommittableTransaction , le recomiendo encarecidamente que NO cree explícitamente sus propias transacciones locales utilizando begin transaction o SqlConnection.BeginTransaction .

TransactionScope / CommittableTransaction son una ''familia'' diferente y son mutuamente excluyentes desde la begin transaction / SqlTransaction

Por lo tanto, estaría en desacuerdo con Saif Khan. Es cierto que System.Transactions tiene problemas de rendimiento en Sql 2000, por lo que podría ser mejor usar SqlTransaction o begin transaction lugar. Sin embargo, si haces eso, entonces NO deberías utilizar TransactionScope / TransactTransaction.

Por cierto, el comportamiento que describió Marc Gravell ha sido cambiado en .Net 4.0. Incluso si no usa Desvinculación explícita, ya no es posible tener algunos comandos retrocedidos y algunos comprometidos. (Sin embargo, tiene razón en que en las versiones anteriores debe usar Explicit Unbind).