transacciones tablas tabla sirven repeatable registro read que por para niveles los interbloqueos evitar desbloquear datos concurrencia bloqueos bloqueo aislamiento sql-server entity-framework c#-4.0 transactions transactionscope

sql server - tablas - Tabla de bloqueo de TransactionScope y IsolationLevel



repeatable read sql server (1)

Quiero usar TransactionScope en mi proyecto. Lo leí y descubrí que crea una transacción implícita en la base de datos. Quiero saber si ese TransactionScope bloquea las tablas que manipula?

Por ejemplo en este código:

using (Entities ent = new Entities()) { using (TransactionScope tran = Common.GetTransactionScope()) { var oldRecords = ent.tblUser.Where(o => o.UserID == UserID); foreach (var item in oldRecords) { ent.tblUser.DeleteObject(item); }

y

public static TransactionScope GetTransactionScope() { TransactionOptions transactionOptions = new TransactionOptions(); transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable; return new TransactionScope(TransactionScopeOption.Required, transactionOptions); }

¿Está tblUser bloqueado hasta que se Complete comando?

¿ IsolationLevel en una transacción explícita es similar a la transacción implícita?

Gracias


Es SQL Server el que hace el bloqueo, si es necesario. Cualquier operación UPDATE o DELETE debe obtener un bloqueo exclusivo en aquellas filas a las que afecta; si ya están bloqueadas por otra transacción, no puede hacer eso.

Por lo tanto, en su caso, si se eliminan varias filas de la base de datos, el Servidor SQL por defecto bloqueará esas filas únicamente , es decir, aquellas que se están eliminando. No bloquea toda la mesa. Esto es a menos que elimine una gran cantidad de filas a la vez: si elimina más de 5,000 filas en una sola transacción, SQL Server intentará realizar una escalada de bloqueo y bloquear toda la tabla (en lugar de mantener y administrar 5000+ cerraduras de fila individuales).

El nivel de aislamiento solo define cuánto tiempo la lectura bloqueará una fila, de manera predeterminada ( READ COMMITTED ), la fila tendrá un bloqueo compartido solo para el momento en que se lee, generalmente en muy poco tiempo. Con el nivel de aislamiento REPEATABLE READ , el bloqueo compartido se mantendrá hasta el final de la transacción actual, y SERIALIZABLE no solo bloqueará las filas que se leen, sino también los rangos enteros de filas. Pero nuevamente: eso solo afecta las operaciones de LECTURA - no tiene un impacto directo en las instrucciones DELETE o UPDATE (aparte de tener un bloqueo compartido en una fila, puede evitar que el DELETE adquiera su bloqueo exclusivo que necesita)