Pregunta

podemos utilizar SQL como este:

SELECT * FROM student WITH(NOLOCK);

¿Cómo puedo lograr esto con LINQ to SQL sin el uso de un TransactionScope?

¿Fue útil?

Solución

LINQ a SQL no tiene ningún mecanismo de hacer esto, pero puede crear una transacción con un nivel de aislamiento específico. Mira el siguiente código:

using (var con = new SqlConnection("constr"))
{
    con.Open();

    using (var transaction = con.BeginTransaction(
        IsolationLevel.ReadUncommitted))
    {
        using (var context = new SchoolDataContext(con))
        {
            // HACK: Setting the context.Transaction is 
            // needed in .NET 3.5 (fixed in .NET 4.0).
            context.Transaction = transaction;
            var q = from s in context.Students select c;
        }
    }
}

A veces el uso de este tipo de aislamiento es útil, es decir, por razones de rendimiento. Pero, por favor asegúrese de que usted no hace ninguna crear, actualizar o eliminar operaciones (CUD) que utilizan este tipo de aislamiento de la base de datos. Es, por supuesto, depende de sus situaciones, pero sus datos podría estar en un estado incoherente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top