@@ -37,69 +37,81 @@ public async Task<bool> InsertSingle(TEntity entity)
3737
3838 public async Task < bool > InsertMany ( IEnumerable < TEntity > entities )
3939 {
40- using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
40+ var strategy = _context . Database . CreateExecutionStrategy ( ) ;
41+ var result = await strategy . ExecuteAsync ( async ( ) =>
42+ {
43+ using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
4144
42- await _context . AddRangeAsync ( entities ) ;
43- var result = await _context . SaveChangesAsync ( ) ;
45+ await _context . AddRangeAsync ( entities ) ;
46+ var result = await _context . SaveChangesAsync ( ) ;
4447
45- await transaction . CommitAsync ( ) ;
46- return result > 0 ;
48+ await transaction . CommitAsync ( ) ;
49+ return result > 0 ;
50+ } ) ;
51+ return result ;
4752 }
4853
4954 public async Task < bool > Remove ( Expression < Func < TEntity , bool > > predicate )
5055 {
51-
52- using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
53- var result = await _context . Set < TEntity > ( ) . AsNoTracking ( ) . SingleOrDefaultAsync ( predicate ) ;
54-
55- if ( result == null )
56- {
57- return false ;
58- }
59- _context . Set < TEntity > ( ) . Remove ( result ) ;
60- var rowsEffected = await _context . SaveChangesAsync ( ) ;
61- if ( rowsEffected > 1 )
56+ var strategy = _context . Database . CreateExecutionStrategy ( ) ;
57+ var result = await strategy . ExecuteAsync ( async ( ) =>
6258 {
63- await _context . Database . RollbackTransactionAsync ( ) ;
59+ using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
60+ var result = await _context . Set < TEntity > ( ) . AsNoTracking ( ) . SingleOrDefaultAsync ( predicate ) ;
61+
62+ if ( result == null )
63+ {
64+ return false ;
65+ }
66+ _context . Set < TEntity > ( ) . Remove ( result ) ;
67+ var rowsEffected = await _context . SaveChangesAsync ( ) ;
68+ if ( rowsEffected > 1 )
69+ {
70+ await _context . Database . RollbackTransactionAsync ( ) ;
71+
72+ _logger . LogError ( "There was an error while trying to deleted despite a record being found" ) ;
73+ throw new MultipleRecordsFoundException ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
74+ }
6475
65- _logger . LogError ( "There was an error while trying to deleted despite a record being found" ) ;
66- throw new MultipleRecordsFoundException ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
67- }
68-
69- await _context . Database . CommitTransactionAsync ( ) ;
70- return true ;
76+ await _context . Database . CommitTransactionAsync ( ) ;
77+ return true ;
78+ } ) ;
79+ return result ;
7180
7281 }
7382
7483 public async Task < TEntity > Update ( TEntity entity , Expression < Func < TEntity , bool > > predicate )
7584 {
76-
77-
78- using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
79-
80- var existingEntity = await _context . Set < TEntity > ( ) . AsNoTracking ( ) . SingleOrDefaultAsync ( predicate ) ;
81-
82- if ( existingEntity == null )
85+ var strategy = _context . Database . CreateExecutionStrategy ( ) ;
86+ var result = await strategy . ExecuteAsync ( async ( ) =>
8387 {
84- return null ;
85- }
86- _context . Update ( entity ) ;
87- var rowsEffected = await _context . SaveChangesAsync ( ) ;
88-
89-
90- if ( rowsEffected == 1 )
91- {
92- await _context . Database . CommitTransactionAsync ( ) ;
93- return entity ;
94- }
95- else if ( rowsEffected > 1 )
96- {
97- await transaction . RollbackAsync ( ) ;
98- _logger . LogError ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
88+ using var transaction = await _context . Database . BeginTransactionAsync ( ) ;
89+
90+ var existingEntity = await _context . Set < TEntity > ( ) . AsNoTracking ( ) . SingleOrDefaultAsync ( predicate ) ;
91+
92+ if ( existingEntity == null )
93+ {
94+ return null ;
95+ }
96+ _context . Update ( entity ) ;
97+ var rowsEffected = await _context . SaveChangesAsync ( ) ;
98+
99+
100+ if ( rowsEffected == 1 )
101+ {
102+ await _context . Database . CommitTransactionAsync ( ) ;
103+ return entity ;
104+ }
105+ else if ( rowsEffected > 1 )
106+ {
107+ await transaction . RollbackAsync ( ) ;
108+ _logger . LogError ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
109+ throw new MultipleRecordsFoundException ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
110+ }
111+ _logger . LogError ( "No records were updated despite a record being found" ) ;
99112 throw new MultipleRecordsFoundException ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
100- }
101- _logger . LogError ( "No records were updated despite a record being found" ) ;
102- throw new MultipleRecordsFoundException ( "Multiple Records were updated by PUT request, Changes have been Rolled-back" ) ;
113+ } ) ;
114+ return result ;
103115 }
104116
105117}
0 commit comments