小编Huz*_*pal的帖子

在 LINQ to SQL for NOLOCK 中使用 TransactionScope 更改隔离级别是否会影响连接?

我正在测试使用 TransactionScope 和选项将隔离级别设置为 ReadUncommitted 以执行特定的查询。然而,我看到的是,因为隔离级别是在连接上设置的,当连接被重用于其他查询时,隔离级别仍然是 ReadUncommitted 而不是重置为默认的 ReadCommitted。

根据许多建议,我将新的 NoLock 方法抽象为扩展,如下所示:

public static class QueryableExtensions
{
    static TransactionScope CreateNoLockTransaction()
    {
        return new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
        {
            IsolationLevel = IsolationLevel.ReadUncommitted
        });
    }

    public static T[] ToNoLockArray<T>(this IEnumerable<T> query)
    {
        using (var ts = CreateNoLockTransaction())
        {
            return query.ToArray();
        }
    }

    public static List<T> ToNoLockList<T>(this IEnumerable<T> query)
    {
        using (var ts = CreateNoLockTransaction())
        {
            return query.ToList();
        }
    }

    public static int NoLockCount<T>(this IEnumerable<T> query)
    {
        using (var ts = CreateNoLockTransaction())
        {
            return query.Count(); …
Run Code Online (Sandbox Code Playgroud)

sql-server transactions transaction-isolation isolation-level linq-to-sql

5
推荐指数
1
解决办法
1048
查看次数