9
9
using MongoDB . Driver ;
10
10
11
11
// ReSharper disable once CheckNamespace
12
- namespace DotNetCore . CAP
12
+ namespace DotNetCore . CAP ;
13
+
14
+ public class MongoDBCapTransaction : CapTransactionBase
13
15
{
14
- public class MongoDBCapTransaction : CapTransactionBase
16
+ public MongoDBCapTransaction ( IDispatcher dispatcher )
17
+ : base ( dispatcher )
15
18
{
16
- public MongoDBCapTransaction ( IDispatcher dispatcher )
17
- : base ( dispatcher )
18
- {
19
- }
19
+ }
20
20
21
- public override void Commit ( )
22
- {
23
- Debug . Assert ( DbTransaction != null ) ;
21
+ public override void Commit ( )
22
+ {
23
+ Debug . Assert ( DbTransaction != null ) ;
24
24
25
- if ( DbTransaction is IClientSessionHandle session ) session . CommitTransaction ( ) ;
25
+ if ( DbTransaction is IClientSessionHandle session ) session . CommitTransaction ( ) ;
26
26
27
- Flush ( ) ;
28
- }
27
+ Flush ( ) ;
28
+ }
29
29
30
- public override async Task CommitAsync ( CancellationToken cancellationToken = default )
31
- {
32
- Debug . Assert ( DbTransaction != null ) ;
30
+ public override async Task CommitAsync ( CancellationToken cancellationToken = default )
31
+ {
32
+ Debug . Assert ( DbTransaction != null ) ;
33
33
34
- if ( DbTransaction is IClientSessionHandle session ) await session . CommitTransactionAsync ( cancellationToken ) ;
34
+ if ( DbTransaction is IClientSessionHandle session )
35
+ await session . CommitTransactionAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
35
36
36
- Flush ( ) ;
37
- }
37
+ Flush ( ) ;
38
+ }
38
39
39
- public override void Rollback ( )
40
- {
41
- Debug . Assert ( DbTransaction != null ) ;
40
+ public override void Rollback ( )
41
+ {
42
+ Debug . Assert ( DbTransaction != null ) ;
42
43
43
- if ( DbTransaction is IClientSessionHandle session ) session . AbortTransaction ( ) ;
44
- }
44
+ if ( DbTransaction is IClientSessionHandle session ) session . AbortTransaction ( ) ;
45
+ }
45
46
46
- public override async Task RollbackAsync ( CancellationToken cancellationToken = default )
47
- {
48
- Debug . Assert ( DbTransaction != null ) ;
47
+ public override async Task RollbackAsync ( CancellationToken cancellationToken = default )
48
+ {
49
+ Debug . Assert ( DbTransaction != null ) ;
50
+
51
+ if ( DbTransaction is IClientSessionHandle session )
52
+ await session . AbortTransactionAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
53
+ }
54
+
55
+ public override void Dispose ( )
56
+ {
57
+ ( DbTransaction as IClientSessionHandle ) ? . Dispose ( ) ;
58
+ DbTransaction = null ;
59
+ }
60
+ }
61
+
62
+ public static class CapTransactionExtensions
63
+ {
64
+ public static ICapTransaction Begin ( this ICapTransaction transaction ,
65
+ IClientSessionHandle dbTransaction , bool autoCommit = false )
66
+ {
67
+ if ( ! dbTransaction . IsInTransaction ) dbTransaction . StartTransaction ( ) ;
49
68
50
- if ( DbTransaction is IClientSessionHandle session ) await session . AbortTransactionAsync ( cancellationToken ) ;
51
- }
69
+ transaction . DbTransaction = dbTransaction ;
70
+ transaction . AutoCommit = autoCommit ;
52
71
53
- public override void Dispose ( )
54
- {
55
- ( DbTransaction as IClientSessionHandle ) ? . Dispose ( ) ;
56
- DbTransaction = null ;
57
- }
72
+ return transaction ;
58
73
}
59
74
60
- public static class CapTransactionExtensions
75
+ /// <summary>
76
+ /// Start the CAP transaction
77
+ /// </summary>
78
+ /// <param name="client">The <see cref="IMongoClient" />.</param>
79
+ /// <param name="publisher">The <see cref="ICapPublisher" />.</param>
80
+ /// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
81
+ /// <returns>The <see cref="IClientSessionHandle" /> of MongoDB transaction session object.</returns>
82
+ public static IClientSessionHandle StartTransaction ( this IMongoClient client ,
83
+ ICapPublisher publisher , bool autoCommit = false )
61
84
{
62
- public static ICapTransaction Begin ( this ICapTransaction transaction ,
63
- IClientSessionHandle dbTransaction , bool autoCommit = false )
64
- {
65
- if ( ! dbTransaction . IsInTransaction ) dbTransaction . StartTransaction ( ) ;
66
-
67
- transaction . DbTransaction = dbTransaction ;
68
- transaction . AutoCommit = autoCommit ;
69
-
70
- return transaction ;
71
- }
72
-
73
- /// <summary>
74
- /// Start the CAP transaction
75
- /// </summary>
76
- /// <param name="client">The <see cref="IMongoClient" />.</param>
77
- /// <param name="publisher">The <see cref="ICapPublisher" />.</param>
78
- /// <param name="autoCommit">Whether the transaction is automatically committed when the message is published</param>
79
- /// <returns>The <see cref="IClientSessionHandle" /> of MongoDB transaction session object.</returns>
80
- public static IClientSessionHandle StartTransaction ( this IMongoClient client ,
81
- ICapPublisher publisher , bool autoCommit = false )
82
- {
83
- var clientSessionHandle = client . StartSession ( ) ;
84
- publisher . Transaction . Value = ActivatorUtilities . CreateInstance < MongoDBCapTransaction > ( publisher . ServiceProvider ) ;
85
- var capTrans = publisher . Transaction . Value . Begin ( clientSessionHandle , autoCommit ) ;
86
- return new CapMongoDbClientSessionHandle ( capTrans ) ;
87
- }
85
+ var clientSessionHandle = client . StartSession ( ) ;
86
+ publisher . Transaction . Value =
87
+ ActivatorUtilities . CreateInstance < MongoDBCapTransaction > ( publisher . ServiceProvider ) ;
88
+ var capTrans = publisher . Transaction . Value . Begin ( clientSessionHandle , autoCommit ) ;
89
+ return new CapMongoDbClientSessionHandle ( capTrans ) ;
88
90
}
89
91
}
0 commit comments