Как использовать WITH (NOLOCK) в LINQ to SQL? - PullRequest
2 голосов
/ 08 февраля 2010

мы можем использовать SQL так:

SELECT * FROM student WITH(NOLOCK);

Как этого добиться с помощью LINQ to SQL без использования TransactionScope?

1 Ответ

9 голосов
/ 08 февраля 2010

LINQ to SQL не имеет никакого механизма для этого, но вы можете создать транзакцию с определенным уровнем изоляции. Посмотрите на код ниже:

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

Иногда использование этого типа изоляции полезно, т. Е. По соображениям производительности. Но, пожалуйста, убедитесь, что вы не выполняете никаких операций создания, обновления или удаления (CUD), используя этот тип изоляции базы данных. Конечно, это зависит от ваших ситуаций, но ваши данные могут попасть в противоречивое состояние.

...