Pergunta

podemos usar SQL como esta:

SELECT * FROM student WITH(NOLOCK);

Como posso conseguir isso com o LINQ to SQL sem o uso de um TransactionScope?

Foi útil?

Solução

LINQ to SQL não tem qualquer mecanismo de fazer isso, mas você pode criar uma transação com um nível de isolamento específico. Olhada no código abaixo:

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;
        }
    }
}

Às vezes usando este tipo de isolamento é útil, ou seja, por razões de desempenho. Mas por favor, certifique-se de não fazer nenhuma criar, atualizar ou excluir operações (CUD) que utilizam este tipo de isolamento base de dados. É claro depende de suas situações, mas seus dados poderia entrar em um estado inconsistente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top