- 补充 同线程时间 fsql.Transaction 事务等级参数的传入;

This commit is contained in:
28810
2019-12-14 01:34:38 +08:00
parent 2b85e2e22d
commit dfb4662d86
20 changed files with 254 additions and 240 deletions

View File

@ -1,7 +1,8 @@
using SafeObjectPool;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Linq;
@ -33,7 +34,7 @@ namespace FreeSql.Internal.CommonProvider
public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null;
public void BeginTransaction(TimeSpan timeout)
public void BeginTransaction(TimeSpan timeout, IsolationLevel? isolationLevel)
{
if (TransactionCurrentThread != null) return;
@ -44,7 +45,7 @@ namespace FreeSql.Internal.CommonProvider
try
{
conn = MasterPool.Get();
tran = new Transaction2(conn, conn.Value.BeginTransaction(), timeout);
tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), timeout);
}
catch (Exception ex)
{
@ -102,15 +103,15 @@ namespace FreeSql.Internal.CommonProvider
public void CommitTransaction() => CommitTransaction(true);
public void RollbackTransaction() => CommitTransaction(false);
public void Transaction(Action handler)
{
Transaction(handler, TimeSpan.FromSeconds(60));
}
public void Transaction(Action handler, TimeSpan timeout)
public void Transaction(Action handler) => TransactionInternal(null, TimeSpan.FromSeconds(60), handler);
public void Transaction(TimeSpan timeout, Action handler) => TransactionInternal(null, timeout, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => TransactionInternal(isolationLevel, timeout, handler);
void TransactionInternal(IsolationLevel? isolationLevel, TimeSpan timeout, Action handler)
{
try
{
BeginTransaction(timeout);
BeginTransaction(timeout, isolationLevel);
handler();
CommitTransaction();
}