2012-03-23 17 views
8

Sé que si utilizo System.Transactions.TransactionScope y no especifico un nivel de aislamiento, estará predeterminado a Serializable. Sin embargo, ¿qué sucede si no estoy utilizando el alcance de la transacción y solo estoy usando un adaptador de tabla anticuado? ¿Cuál es el nivel de aislamiento predeterminado entonces?¿Cuál es el nivel de aislamiento predeterminado de ADO.NET?

Muchas gracias de antemano.

+5

Es más complejo; el nivel de aislamiento no se restablece entre los usos de una conexión agrupada, por lo que también depende de "lo que estaba haciendo el último uso de la conexión subyacente" –

+0

@MarcGravell Sí, eso es genial, gracias. Un colega mío me acaba de enviar un enlace que menciona lo mismo. No es exactamente el abismo del éxito, y cómo no lo he notado en 7 años usando .NET No tengo ni idea ... –

+0

Pero el "valor predeterminado predeterminado" probablemente se haya leído commit –

Respuesta

3

Es posible que no desee confiar en los valores predeterminados si necesita ser absoluto con respecto a las operaciones de datos de la aplicación. Estas cosas pueden cambiar entre versiones de framework.

Recomendamos explícitamente los niveles de aislamiento y configuración de sesión en todas las llamadas de datos, ya sea a través de TransactionScope (que puede significar escalación a DTC en función de las circunstancias) o explícitamente dentro de la llamada de proc almacenada (si esa es una ruta).

Más detalles sobre DTC/TransactionScope: https://stackoverflow.com/a/9075800/1568341

TL; DR

A: Lectura confirmada por SQLS pero no lo hacen suponer un defecto

Cuestiones relacionadas