Вопрос

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

SELECT * FROM student WITH(NOLOCK);

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

Это было полезно?

Решение

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), используя этот тип изоляции базы данных.Это, конечно, зависит от вашей ситуации, но ваши данные могут оказаться в несогласованном состоянии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top