我正在测试使用 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