@@ -81,19 +81,57 @@ public class TrackerIdentityContext<TUser, TRole, TKey, TUserClaim, TUserRole, T
8181 private Func < string > _usernameFactory ;
8282 private string _defaultUsername ;
8383 private Action < dynamic > _metadataConfiguration ;
84- private bool _trackingEnabled = true ;
84+ private bool _additionTrackingEnabled = true ;
85+ private bool _modificationTrackingEnabled = true ;
86+ private bool _deletionTrackingEnabled = true ;
8587
8688 public bool TrackingEnabled
8789 {
8890 get
8991 {
90- return GlobalTrackingConfig . Enabled && _trackingEnabled ;
92+ return GlobalTrackingConfig . Enabled && ( _additionTrackingEnabled || _modificationTrackingEnabled || _deletionTrackingEnabled ) ;
9193 }
9294 set
9395 {
94- _trackingEnabled = value ;
96+ AdditionTrackingEnabled = value ;
97+ ModificationTrackingEnabled = value ;
98+ DeletionTrackingEnabled = value ;
9599 }
96100 }
101+ public bool AdditionTrackingEnabled
102+ {
103+ get
104+ {
105+ return GlobalTrackingConfig . AdditionsEnabled && _additionTrackingEnabled ;
106+ }
107+ set
108+ {
109+ _additionTrackingEnabled = value ;
110+ }
111+ }
112+ public bool ModificationTrackingEnabled
113+ {
114+ get
115+ {
116+ return GlobalTrackingConfig . ModificationsEnabled && _modificationTrackingEnabled ;
117+ }
118+ set
119+ {
120+ _modificationTrackingEnabled = value ;
121+ }
122+ }
123+ public bool DeletionTrackingEnabled
124+ {
125+ get
126+ {
127+ return GlobalTrackingConfig . DeletionsEnabled && _deletionTrackingEnabled ;
128+ }
129+ set
130+ {
131+ _deletionTrackingEnabled = value ;
132+ }
133+ }
134+
97135 public virtual DbSet < AuditLog > AuditLogs { get ; set ; }
98136 public virtual DbSet < AuditLogDetail > AuditLogDetails { get ; set ; }
99137
@@ -181,17 +219,30 @@ public virtual int SaveChanges(object userName)
181219 dynamic metadata = new ExpandoObject ( ) ;
182220 _metadataConfiguration ? . Invoke ( metadata ) ;
183221
184- _coreTracker . AuditChanges ( userName , metadata ) ;
222+ if ( ModificationTrackingEnabled )
223+ _coreTracker . AuditModifications ( userName , metadata ) ;
224+ if ( DeletionTrackingEnabled )
225+ _coreTracker . AuditDeletions ( userName , metadata ) ;
185226
186- IEnumerable < EntityEntry > addedEntries = _coreTracker . GetAdditions ( ) ;
187- // Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
188- int result = base . SaveChanges ( ) ;
189- //By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.
227+ int result ;
228+ if ( AdditionTrackingEnabled )
229+ {
230+ IEnumerable < EntityEntry > addedEntries = _coreTracker . GetAdditions ( ) ;
231+ // Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
232+ result = base . SaveChanges ( ) ;
233+ //By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.
190234
191- _coreTracker . AuditAdditions ( userName , addedEntries , metadata ) ;
235+ _coreTracker . AuditAdditions ( userName , addedEntries , metadata ) ;
192236
193- //save changes to audit of added entries
194- base . SaveChanges ( ) ;
237+ //save changes to audit of added entries
238+ base . SaveChanges ( ) ;
239+ }
240+ else
241+ {
242+ //save changes
243+ result = base . SaveChanges ( ) ;
244+ }
245+
195246 return result ;
196247 }
197248 /// <summary>
@@ -233,18 +284,32 @@ public virtual async Task<int> SaveChangesAsync(object userName, CancellationTok
233284 dynamic metadata = new ExpandoObject ( ) ;
234285 _metadataConfiguration ? . Invoke ( metadata ) ;
235286
236- _coreTracker . AuditChanges ( userName , metadata ) ;
287+ if ( ModificationTrackingEnabled )
288+ _coreTracker . AuditModifications ( userName , metadata ) ;
237289
238- IEnumerable < EntityEntry > addedEntries = _coreTracker . GetAdditions ( ) ;
290+ if ( DeletionTrackingEnabled )
291+ _coreTracker . AuditDeletions ( userName , metadata ) ;
239292
240- // Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
241- int result = await base . SaveChangesAsync ( cancellationToken ) ;
242293
243- //By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.
244- _coreTracker . AuditAdditions ( userName , addedEntries , metadata ) ;
294+ int result ;
295+ if ( AdditionTrackingEnabled )
296+ {
297+ IEnumerable < EntityEntry > addedEntries = _coreTracker . GetAdditions ( ) ;
298+
299+ // Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
300+ result = await base . SaveChangesAsync ( cancellationToken ) ;
245301
246- //save changes to audit of added entries
247- await base . SaveChangesAsync ( cancellationToken ) ;
302+ //By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.
303+ _coreTracker . AuditAdditions ( userName , addedEntries , metadata ) ;
304+
305+ //save changes to audit of added entries
306+ await base . SaveChangesAsync ( cancellationToken ) ;
307+ }
308+ else
309+ {
310+ //save changes
311+ result = await base . SaveChangesAsync ( cancellationToken ) ;
312+ }
248313
249314 return result ;
250315 }
0 commit comments