Usando IsolationLevel.Snapshot pero DB sigue bloqueando

Soy parte de un equipo que construye un sitio web basado en ADO.NET. A veces tenemos varios desarrolladores y una herramienta de prueba automatizada que trabaja simultáneamente una copia de desarrollo de la base de datos.

Utilizamos el nivel de aislamiento de instantáneas, que, a mi entender, utiliza una concurrencia optimista: en lugar de bloquear, espera lo mejor y lanza una excepción si intenta cometer una transacción si las filas afectadas han sido alteradas por otra parte durante la transacción.

Para usar el nivel de aislamiento de instantáneas usamos:

<code>ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;
</code>

y en C #:

<code>Transaction = SqlConnection.BeginTransaction(IsolationLevel.Snapshot);
</code>

Tenga en cuenta que IsolationLevel Snapshot no es lo mismo que ReadCommitted Snapshot, que también hemos intentado, pero no estamos usando actualmente.

Cuando uno de los desarrolladores ingresa al modo de depuración y detiene la aplicación .NET, mantendrá una conexión con una transacción activa mientras realiza la depuración. Ahora, espero que esto no sea un problema; después de todo, todas las transacciones están usando el nivel de aislamiento de instantáneas, por lo que mientras una transacción está en pausa, otras transacciones deberían poder continuar normalmente ya que la transacción en pausa no tiene ningún bloqueo. Por supuesto, cuando la transacción en pausa se completa, es probable que detecte un conflicto; pero eso es aceptable siempre y cuando otros desarrolladores y las pruebas automatizadas puedan proceder sin obstáculos.

Sin embargo, en la práctica, cuando una persona detiene una transacción mientras realiza la depuración, todos los demás usuarios de la base de datos que intentan acceder a las mismas filas se bloquean a pesar de usar el nivel de aislamiento de instantáneas.

¿Alguien sabe por qué ocurre esto y / o cómo puedo lograr una verdadera concurrencia optimista (sin bloqueo)?

La resolución (una desafortunada para mi): Remus rusanu Señaló que los escritores siempre bloquean a otros escritores; esto está respaldado porMSDN - No sale del todo y lo dice, pero solo menciona evitar el bloqueo de lectores y escritores. En resumen, el comportamiento que quiero no está implementado en SQL Server.

Respuestas a la pregunta(2)

Su respuesta a la pregunta