@@ -195,9 +195,7 @@ public void BeginTransaction(Session session, SqlConnection connection, Isolatio
195195 isolationLevel ) ;
196196 }
197197
198- if ( isolationLevel == null ) {
199- isolationLevel = IsolationLevelConverter . Convert ( GetConfiguration ( session ) . DefaultIsolationLevel ) ;
200- }
198+ isolationLevel ??= IsolationLevelConverter . Convert ( GetConfiguration ( session ) . DefaultIsolationLevel ) ;
201199
202200 try {
203201 connection . BeginTransaction ( isolationLevel . Value ) ;
@@ -207,6 +205,24 @@ public void BeginTransaction(Session session, SqlConnection connection, Isolatio
207205 }
208206 }
209207
208+ public async ValueTask BeginTransactionAsync (
209+ Session session , SqlConnection connection , IsolationLevel ? isolationLevel , CancellationToken token = default )
210+ {
211+ if ( isLoggingEnabled ) {
212+ SqlLog . Info ( Strings . LogSessionXBeginningTransactionWithYIsolationLevel , session . ToStringSafely ( ) ,
213+ isolationLevel ) ;
214+ }
215+
216+ isolationLevel ??= IsolationLevelConverter . Convert ( GetConfiguration ( session ) . DefaultIsolationLevel ) ;
217+
218+ try {
219+ await connection . BeginTransactionAsync ( isolationLevel . Value , token ) . ConfigureAwait ( false ) ;
220+ }
221+ catch ( Exception exception ) {
222+ throw ExceptionBuilder . BuildException ( exception ) ;
223+ }
224+ }
225+
210226 public void CommitTransaction ( Session session , SqlConnection connection )
211227 {
212228 if ( isLoggingEnabled ) {
@@ -221,6 +237,21 @@ public void CommitTransaction(Session session, SqlConnection connection)
221237 }
222238 }
223239
240+ public async ValueTask CommitTransactionAsync (
241+ Session session , SqlConnection connection , CancellationToken token = default )
242+ {
243+ if ( isLoggingEnabled ) {
244+ SqlLog . Info ( Strings . LogSessionXCommitTransaction , session . ToStringSafely ( ) ) ;
245+ }
246+
247+ try {
248+ await connection . CommitAsync ( token ) . ConfigureAwait ( false ) ;
249+ }
250+ catch ( Exception exception ) {
251+ throw ExceptionBuilder . BuildException ( exception ) ;
252+ }
253+ }
254+
224255 public void RollbackTransaction ( Session session , SqlConnection connection )
225256 {
226257 if ( isLoggingEnabled ) {
@@ -235,14 +266,29 @@ public void RollbackTransaction(Session session, SqlConnection connection)
235266 }
236267 }
237268
269+ public async ValueTask RollbackTransactionAsync (
270+ Session session , SqlConnection connection , CancellationToken token = default )
271+ {
272+ if ( isLoggingEnabled ) {
273+ SqlLog . Info ( Strings . LogSessionXRollbackTransaction , session . ToStringSafely ( ) ) ;
274+ }
275+
276+ try {
277+ await connection . RollbackAsync ( token ) . ConfigureAwait ( false ) ;
278+ }
279+ catch ( Exception exception ) {
280+ throw ExceptionBuilder . BuildException ( exception ) ;
281+ }
282+ }
283+
238284 public void MakeSavepoint ( Session session , SqlConnection connection , string name )
239285 {
240286 if ( isLoggingEnabled ) {
241287 SqlLog . Info ( Strings . LogSessionXMakeSavepointY , session . ToStringSafely ( ) , name ) ;
242288 }
243289
244290 if ( ! hasSavepoints ) {
245- return ; // Driver does not support savepoints , so let's fail later (on rollback)
291+ return ; // Driver does not support save points , so let's fail later (on rollback)
246292 }
247293
248294 try {
@@ -253,6 +299,25 @@ public void MakeSavepoint(Session session, SqlConnection connection, string name
253299 }
254300 }
255301
302+ public async ValueTask MakeSavepointAsync (
303+ Session session , SqlConnection connection , string name , CancellationToken token = default )
304+ {
305+ if ( isLoggingEnabled ) {
306+ SqlLog . Info ( Strings . LogSessionXMakeSavepointY , session . ToStringSafely ( ) , name ) ;
307+ }
308+
309+ if ( ! hasSavepoints ) {
310+ return ; // Driver does not support save points, so let's fail later (on rollback)
311+ }
312+
313+ try {
314+ await connection . MakeSavepointAsync ( name , token ) . ConfigureAwait ( false ) ;
315+ }
316+ catch ( Exception exception ) {
317+ throw ExceptionBuilder . BuildException ( exception ) ;
318+ }
319+ }
320+
256321 public void RollbackToSavepoint ( Session session , SqlConnection connection , string name )
257322 {
258323 if ( isLoggingEnabled ) {
@@ -270,7 +335,26 @@ public void RollbackToSavepoint(Session session, SqlConnection connection, strin
270335 throw ExceptionBuilder . BuildException ( exception ) ;
271336 }
272337 }
273-
338+
339+ public async ValueTask RollbackToSavepointAsync (
340+ Session session , SqlConnection connection , string name , CancellationToken token = default )
341+ {
342+ if ( isLoggingEnabled ) {
343+ SqlLog . Info ( Strings . LogSessionXRollbackToSavepointY , session . ToStringSafely ( ) , name ) ;
344+ }
345+
346+ if ( ! hasSavepoints ) {
347+ throw new NotSupportedException ( Strings . ExCurrentStorageProviderDoesNotSupportSavepoints ) ;
348+ }
349+
350+ try {
351+ await connection . RollbackToSavepointAsync ( name , token ) . ConfigureAwait ( false ) ;
352+ }
353+ catch ( Exception exception ) {
354+ throw ExceptionBuilder . BuildException ( exception ) ;
355+ }
356+ }
357+
274358 public void ReleaseSavepoint ( Session session , SqlConnection connection , string name )
275359 {
276360 if ( isLoggingEnabled ) {
@@ -285,6 +369,21 @@ public void ReleaseSavepoint(Session session, SqlConnection connection, string n
285369 }
286370 }
287371
372+ public async ValueTask ReleaseSavepointAsync (
373+ Session session , SqlConnection connection , string name , CancellationToken token = default )
374+ {
375+ if ( isLoggingEnabled ) {
376+ SqlLog . Info ( Strings . LogSessionXReleaseSavepointY , session . ToStringSafely ( ) , name ) ;
377+ }
378+
379+ try {
380+ await connection . ReleaseSavepointAsync ( name , token ) . ConfigureAwait ( false ) ;
381+ }
382+ catch ( Exception exception ) {
383+ throw ExceptionBuilder . BuildException ( exception ) ;
384+ }
385+ }
386+
288387 #region Sync Execute methods
289388
290389 public int ExecuteNonQuery ( Session session , DbCommand command ) =>
0 commit comments