Skip to content

Commit 70d39e4

Browse files
committed
Add a new parameter IsolationLevel for BeginTransaction method.
1 parent ba599af commit 70d39e4

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

src/DotNetCore.CAP.MySql/ICapTransaction.MySql.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using DotNetCore.CAP.Transport;
11+
using Microsoft.EntityFrameworkCore;
1112
using Microsoft.EntityFrameworkCore.Infrastructure;
1213
using Microsoft.EntityFrameworkCore.Storage;
1314
using Microsoft.Extensions.DependencyInjection;
@@ -119,7 +120,7 @@ public static ICapTransaction Begin(this ICapTransaction transaction,
119120
/// <param name="database">The <see cref="DatabaseFacade" />.</param>
120121
/// <param name="publisher">The <see cref="ICapPublisher" />.</param>
121122
/// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
122-
/// <returns>The <see cref="IDbContextTransaction" /> of EF dbcontext transaction object.</returns>
123+
/// <returns>The <see cref="IDbContextTransaction" /> of EF DbContext transaction object.</returns>
123124
public static IDbContextTransaction BeginTransaction(this DatabaseFacade database,
124125
ICapPublisher publisher, bool autoCommit = false)
125126
{
@@ -129,6 +130,23 @@ public static IDbContextTransaction BeginTransaction(this DatabaseFacade databas
129130
return new CapEFDbTransaction(capTrans);
130131
}
131132

133+
/// <summary>
134+
/// Start the CAP transaction
135+
/// </summary>
136+
/// <param name="database">The <see cref="DatabaseFacade" />.</param>
137+
/// <param name="publisher">The <see cref="ICapPublisher" />.</param>
138+
/// <param name="isolationLevel">The <see cref="IsolationLevel" /> to use</param>
139+
/// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
140+
/// <returns>The <see cref="IDbContextTransaction" /> of EF DbContext transaction object.</returns>
141+
public static IDbContextTransaction BeginTransaction(this DatabaseFacade database,
142+
IsolationLevel isolationLevel, ICapPublisher publisher, bool autoCommit = false)
143+
{
144+
var trans = database.BeginTransaction(isolationLevel);
145+
publisher.Transaction.Value = ActivatorUtilities.CreateInstance<MySqlCapTransaction>(publisher.ServiceProvider);
146+
var capTrans = publisher.Transaction.Value.Begin(trans, autoCommit);
147+
return new CapEFDbTransaction(capTrans);
148+
}
149+
132150
/// <summary>
133151
/// Start the CAP transaction
134152
/// </summary>

src/DotNetCore.CAP.PostgreSql/ICapTransaction.PostgreSql.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using DotNetCore.CAP.Transport;
11+
using Microsoft.EntityFrameworkCore;
1112
using Microsoft.EntityFrameworkCore.Infrastructure;
1213
using Microsoft.EntityFrameworkCore.Storage;
1314
using Microsoft.Extensions.DependencyInjection;
@@ -144,5 +145,22 @@ public static IDbContextTransaction BeginTransaction(this DatabaseFacade databas
144145
var capTrans = publisher.Transaction.Value.Begin(trans, autoCommit);
145146
return new CapEFDbTransaction(capTrans);
146147
}
148+
149+
/// <summary>
150+
/// Start the CAP transaction
151+
/// </summary>
152+
/// <param name="database">The <see cref="DatabaseFacade" />.</param>
153+
/// <param name="publisher">The <see cref="ICapPublisher" />.</param>
154+
/// <param name="isolationLevel">The <see cref="IsolationLevel" /> to use</param>
155+
/// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
156+
/// <returns>The <see cref="IDbContextTransaction" /> of EF DbContext transaction object.</returns>
157+
public static IDbContextTransaction BeginTransaction(this DatabaseFacade database,
158+
IsolationLevel isolationLevel, ICapPublisher publisher, bool autoCommit = false)
159+
{
160+
var trans = database.BeginTransaction(isolationLevel);
161+
publisher.Transaction.Value = ActivatorUtilities.CreateInstance<PostgreSqlCapTransaction>(publisher.ServiceProvider);
162+
var capTrans = publisher.Transaction.Value.Begin(trans, autoCommit);
163+
return new CapEFDbTransaction(capTrans);
164+
}
147165
}
148166
}

src/DotNetCore.CAP.SqlServer/ICapTransaction.SqlServer.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using DotNetCore.CAP.SqlServer.Diagnostics;
1313
using DotNetCore.CAP.Transport;
1414
using Microsoft.Data.SqlClient;
15+
using Microsoft.EntityFrameworkCore;
1516
using Microsoft.EntityFrameworkCore.Infrastructure;
1617
using Microsoft.EntityFrameworkCore.Storage;
1718
using Microsoft.Extensions.DependencyInjection;
@@ -177,7 +178,7 @@ public static IDbTransaction BeginTransaction(this IDbConnection dbConnection,
177178
/// <param name="database">The <see cref="DatabaseFacade" />.</param>
178179
/// <param name="publisher">The <see cref="ICapPublisher" />.</param>
179180
/// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
180-
/// <returns>The <see cref="IDbContextTransaction" /> of EF dbcontext transaction object.</returns>
181+
/// <returns>The <see cref="IDbContextTransaction" /> of EF DbContext transaction object.</returns>
181182
public static IDbContextTransaction BeginTransaction(this DatabaseFacade database,
182183
ICapPublisher publisher, bool autoCommit = false)
183184
{
@@ -187,4 +188,21 @@ public static IDbContextTransaction BeginTransaction(this DatabaseFacade databas
187188
var capTrans = publisher.Transaction.Value.Begin(trans, autoCommit);
188189
return new CapEFDbTransaction(capTrans);
189190
}
191+
192+
/// <summary>
193+
/// Start the CAP transaction
194+
/// </summary>
195+
/// <param name="database">The <see cref="DatabaseFacade" />.</param>
196+
/// <param name="publisher">The <see cref="ICapPublisher" />.</param>
197+
/// <param name="isolationLevel">The <see cref="IsolationLevel" /> to use</param>
198+
/// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
199+
/// <returns>The <see cref="IDbContextTransaction" /> of EF DbContext transaction object.</returns>
200+
public static IDbContextTransaction BeginTransaction(this DatabaseFacade database,
201+
IsolationLevel isolationLevel, ICapPublisher publisher, bool autoCommit = false)
202+
{
203+
var trans = database.BeginTransaction(isolationLevel);
204+
publisher.Transaction.Value = ActivatorUtilities.CreateInstance<SqlServerCapTransaction>(publisher.ServiceProvider);
205+
var capTrans = publisher.Transaction.Value.Begin(trans, autoCommit);
206+
return new CapEFDbTransaction(capTrans);
207+
}
190208
}

0 commit comments

Comments
 (0)