File tree Expand file tree Collapse file tree 3 files changed +19
-2
lines changed Expand file tree Collapse file tree 3 files changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -9,6 +9,8 @@ internal abstract class ImplicitTransactionBase : IEnlistmentNotification
9
9
{
10
10
public MySqlConnection Connection { get ; }
11
11
12
+ public Transaction Transaction { get ; private set ; }
13
+
12
14
public void Start ( Transaction transaction )
13
15
{
14
16
Transaction = transaction ;
@@ -42,8 +44,6 @@ void IEnlistmentNotification.Rollback(Enlistment enlistment)
42
44
43
45
protected ImplicitTransactionBase ( MySqlConnection connection ) => Connection = connection ;
44
46
45
- protected Transaction Transaction { get ; private set ; }
46
-
47
47
protected abstract void OnStart ( ) ;
48
48
protected abstract void OnPrepare ( PreparingEnlistment enlistment ) ;
49
49
protected abstract void OnCommit ( Enlistment enlistment ) ;
Original file line number Diff line number Diff line change @@ -85,6 +85,10 @@ private async Task<MySqlTransaction> BeginDbTransactionAsync(IsolationLevel isol
85
85
#if ! NETSTANDARD1_3
86
86
public override void EnlistTransaction ( System . Transactions . Transaction transaction )
87
87
{
88
+ // ignore reenlistment of same connection in same transaction
89
+ if ( m_implicitTransaction ? . Transaction . Equals ( transaction ) ?? false )
90
+ return ;
91
+
88
92
if ( m_implicitTransaction != null )
89
93
throw new MySqlException ( "Already enlisted in a Transaction." ) ;
90
94
if ( CurrentTransaction != null )
Original file line number Diff line number Diff line change @@ -26,6 +26,19 @@ public TransactionScopeTests(DatabaseFixture database)
26
26
#endif
27
27
} ;
28
28
29
+ [ Theory ]
30
+ [ MemberData ( nameof ( ConnectionStrings ) ) ]
31
+ public void EnlistSameTransaction ( string connectionString )
32
+ {
33
+ using ( new TransactionScope ( ) )
34
+ using ( var connection = new MySqlConnection ( AppConfig . ConnectionString + ";" + connectionString ) )
35
+ {
36
+ connection . Open ( ) ;
37
+ connection . EnlistTransaction ( System . Transactions . Transaction . Current ) ;
38
+ connection . EnlistTransaction ( System . Transactions . Transaction . Current ) ;
39
+ }
40
+ }
41
+
29
42
[ Theory ]
30
43
[ MemberData ( nameof ( ConnectionStrings ) ) ]
31
44
public void EnlistTwoTransactions ( string connectionString )
You can’t perform that action at this time.
0 commit comments