|
@@ -221,6 +221,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static List<T> ToListWithNoLock<T>(this IQueryable<T> query)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.ToList();
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<int> CountWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
public static async Task<int> CountWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -232,6 +243,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static int CountWithNoLock<T>(this IQueryable<T> query)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.Count();
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<int> CountWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
public static async Task<int> CountWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -243,6 +265,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static int CountWithNoLock<T>(this IQueryable<T> query, Expression<Func<T, bool>> where)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.Count(where);
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<bool> AnyWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
public static async Task<bool> AnyWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -254,6 +287,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static bool AnyWithNoLock<T>(this IQueryable<T> query)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.Any();
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<bool> AnyWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
public static async Task<bool> AnyWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -265,6 +309,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static bool AnyWithNoLock<T>(this IQueryable<T> query, Expression<Func<T, bool>> where)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.Any(where);
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<T> FirstOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
public static async Task<T> FirstOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -276,20 +331,42 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
- public static async Task<T> FirstOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
|
|
|
|
+ public static T FirstOrDefaultWithNoLock<T>(this IQueryable<T> query, Expression<Func<T, bool>> where)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
{
|
|
{
|
|
IsolationLevel = IsolationLevel.ReadUncommitted
|
|
IsolationLevel = IsolationLevel.ReadUncommitted
|
|
}, TransactionScopeAsyncFlowOption.Enabled);
|
|
}, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.FirstOrDefault(where);
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static async Task<T> FirstOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
var result = await query.FirstOrDefaultAsync(cancellationToken);
|
|
var result = await query.FirstOrDefaultAsync(cancellationToken);
|
|
scope.Complete();
|
|
scope.Complete();
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static T FirstOrDefaultWithNoLock<T>(this IQueryable<T> query)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.FirstOrDefault();
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<T> SingleOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
public static async Task<T> SingleOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
- using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
|
|
{
|
|
{
|
|
IsolationLevel = IsolationLevel.ReadUncommitted
|
|
IsolationLevel = IsolationLevel.ReadUncommitted
|
|
}, TransactionScopeAsyncFlowOption.Enabled);
|
|
}, TransactionScopeAsyncFlowOption.Enabled);
|
|
@@ -298,6 +375,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static T SingleOrDefaultWithNoLock<T>(this IQueryable<T> query, Expression<Func<T, bool>> where)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.SingleOrDefault(where);
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<T> SingleOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
public static async Task<T> SingleOrDefaultWithNoLockAsync<T>(this IQueryable<T> query, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -309,6 +397,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static T SingleOrDefaultWithNoLock<T>(this IQueryable<T> query)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.SingleOrDefault();
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static async Task<bool> AllWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
public static async Task<bool> AllWithNoLockAsync<T>(this IQueryable<T> query, Expression<Func<T, bool>> where, CancellationToken cancellationToken = default)
|
|
{
|
|
{
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
@@ -320,6 +419,17 @@ public static class DbContextExt
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static bool AllWithNoLock<T>(this IQueryable<T> query, Expression<Func<T, bool>> where)
|
|
|
|
+ {
|
|
|
|
+ using var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
|
|
|
|
+ {
|
|
|
|
+ IsolationLevel = IsolationLevel.ReadUncommitted
|
|
|
|
+ }, TransactionScopeAsyncFlowOption.Enabled);
|
|
|
|
+ var result = query.All(where);
|
|
|
|
+ scope.Complete();
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static T NoLock<T, TDbContext>(this TDbContext dbContext, Func<TDbContext, T> func) where TDbContext : DbContext
|
|
public static T NoLock<T, TDbContext>(this TDbContext dbContext, Func<TDbContext, T> func) where TDbContext : DbContext
|
|
{
|
|
{
|
|
var strategy = dbContext.Database.CreateExecutionStrategy();
|
|
var strategy = dbContext.Database.CreateExecutionStrategy();
|