Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Split global enable/disable into additions, changes, and deletions en…
…ables/disables
  • Loading branch information
aswanson08 committed Feb 10, 2017
commit 45603ffdd730949ca1d311a9160132738b223d11
4 changes: 3 additions & 1 deletion TrackerEnabledDbContext.Common.Testing/PersistanceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ namespace TrackerEnabledDbContext.Common.Testing
public virtual void Initialize()
{
_transaction = Db.Database.BeginTransaction();
GlobalTrackingConfig.Enabled = true;
GlobalTrackingConfig.AdditionsEnabled = true;
GlobalTrackingConfig.ChangesEnabled = true;
GlobalTrackingConfig.DeletionsEnabled = true;
GlobalTrackingConfig.TrackEmptyPropertiesOnAdditionAndDeletion = false;
GlobalTrackingConfig.DisconnectedContext = false;
GlobalTrackingConfig.ClearFluentConfiguration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ namespace TrackerEnabledDbContext.Common.Configuration
{
public static class GlobalTrackingConfig
{
public static bool Enabled { get; set; } = true;
public static bool AdditionsEnabled { get; set; } = true;
public static bool ChangesEnabled { get; set; } = true;
public static bool DeletionsEnabled { get; set; } = true;

public static bool TrackEmptyPropertiesOnAdditionAndDeletion { get; set; } = false;

Expand Down
29 changes: 27 additions & 2 deletions TrackerEnabledDbContext.Common/CoreTracker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,36 @@ public CoreTracker(ITrackerContext context)

public void AuditChanges(object userName, ExpandoObject metadata)
{
// Get all Deleted/Modified entities (not Unmodified or Detached or Added)
// Get all Modified entities (not Unmodified or Deleted or Detached or Added)
foreach (
DbEntityEntry ent in
_context.ChangeTracker.Entries()
.Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified))
.Where(p => p.State == EntityState.Modified))
{
using (var auditer = new LogAuditor(ent))
{
AuditLog record = auditer.CreateLogRecord(userName, EventType.Modified, _context, metadata);

if (record != null)
{
var arg = new AuditLogGeneratedEventArgs(record, ent.Entity, metadata);
RaiseOnAuditLogGenerated(this, arg);
if (!arg.SkipSavingLog)
{
_context.AuditLog.Add(record);
}
}
}
}
}

public void AuditDeletions(object userName, ExpandoObject metadata)
{
// Get all Deleted entities (not Unmodified or Detached or Added)
foreach (
DbEntityEntry ent in
_context.ChangeTracker.Entries()
.Where(p => p.State == EntityState.Deleted))
{
using (var auditer = new LogAuditor(ent))
{
Expand Down
4 changes: 3 additions & 1 deletion TrackerEnabledDbContext.Common/Interfaces/ITrackerContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ public interface ITrackerContext : IDbContext
{
DbSet<AuditLog> AuditLog { get; set; }
DbSet<AuditLogDetail> LogDetails { get; set; }
bool TrackingEnabled { get; set; }
bool AdditionTrackingEnabled { get; set; }
bool ChangeTrackingEnabled { get; set; }
bool DeletionTrackingEnabled { get; set; }

event EventHandler<AuditLogGeneratedEventArgs> OnAuditLogGenerated;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ public class FluentConfigurationTestsForIdentity : PersistanceTests<TestTrackerI
[TestMethod]
public void Can_recognise_global_tracking_indicator_when_disabled()
{
GlobalTrackingConfig.Enabled = false;
GlobalTrackingConfig.AdditionsEnabled = false;
GlobalTrackingConfig.ChangesEnabled = false;
GlobalTrackingConfig.DeletionsEnabled = false;
EntityTracker
.TrackAllProperties<POCO>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,9 @@ public void Can_recognise_context_tracking_indicator_when_disabled()
NormalModel model = ObjectFactory.Create<NormalModel>();
Db.NormalModels.Add(model);

Db.TrackingEnabled = false;
Db.AdditionTrackingEnabled = false;
Db.DeletionTrackingEnabled = false;
Db.ChangeTrackingEnabled = false;
Db.SaveChanges();

model.AssertNoLogs(Db, model.Id);
Expand Down
73 changes: 58 additions & 15 deletions TrackerEnabledDbContext.Identity/TrackerIdentityContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,43 @@ public class TrackerIdentityContext<TUser, TRole, TKey, TUserLogin, TUserRole, T
private string _defaultUsername;
private Action<dynamic> _metadataConfiguration;

private bool _trackingEnabled = true;
public bool TrackingEnabled
private bool _additionTrackingEnabled = true;
private bool _changeTrackingEnabled = true;
private bool _deletionTrackingEnabled = true;

public bool AdditionTrackingEnabled
{
get
{
return GlobalTrackingConfig.AdditionsEnabled && _additionTrackingEnabled;
}
set
{
_additionTrackingEnabled = value;
}
}

public bool ChangeTrackingEnabled
{
get
{
return GlobalTrackingConfig.ChangesEnabled && _changeTrackingEnabled;
}
set
{
_changeTrackingEnabled = value;
}
}

public bool DeletionTrackingEnabled
{
get
{
return GlobalTrackingConfig.Enabled && _trackingEnabled;
return GlobalTrackingConfig.DeletionsEnabled && _deletionTrackingEnabled;
}
set
{
_trackingEnabled = value;
_deletionTrackingEnabled = value;
}
}

Expand Down Expand Up @@ -114,22 +141,25 @@ public virtual event EventHandler<AuditLogGeneratedEventArgs> OnAuditLogGenerate
/// <returns>Returns the number of objects written to the underlying database.</returns>
public virtual int SaveChanges(object userName)
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return base.SaveChanges();
}

dynamic metadata = new ExpandoObject();
_metadataConfiguration?.Invoke(metadata);

_coreTracker.AuditChanges(userName, metadata);
if (ChangeTrackingEnabled) _coreTracker.AuditChanges(userName, metadata);
if (DeletionTrackingEnabled) _coreTracker.AuditDeletions(userName, metadata);

IEnumerable<DbEntityEntry> addedEntries = _coreTracker.GetAdditions();
// Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
int result = base.SaveChanges();
//By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.

_coreTracker.AuditAdditions(userName, addedEntries, metadata);
if (AdditionTrackingEnabled) _coreTracker.AuditAdditions(userName, addedEntries, metadata);

//save changes to audit of added entries
base.SaveChanges();
Expand All @@ -144,7 +174,9 @@ public virtual int SaveChanges(object userName)
/// <returns>Returns the number of objects written to the underlying database.</returns>
public override int SaveChanges()
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return base.SaveChanges();
}
Expand Down Expand Up @@ -208,7 +240,9 @@ public virtual IQueryable<AuditLog> GetLogs(string tableName, object primaryKey)
/// <returns>Returns the number of objects written to the underlying database.</returns>
public virtual async Task<int> SaveChangesAsync(object userName, CancellationToken cancellationToken)
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return await base.SaveChangesAsync(cancellationToken);
}
Expand All @@ -219,15 +253,16 @@ public virtual async Task<int> SaveChangesAsync(object userName, CancellationTok
dynamic metadata = new ExpandoObject();
_metadataConfiguration?.Invoke(metadata);

_coreTracker.AuditChanges(userName, metadata);
if (ChangeTrackingEnabled) _coreTracker.AuditChanges(userName, metadata);
if (DeletionTrackingEnabled) _coreTracker.AuditDeletions(userName, metadata);

IEnumerable<DbEntityEntry> addedEntries = _coreTracker.GetAdditions();

// Call the original SaveChanges(), which will save both the changes made and the audit records...Note that added entry auditing is still remaining.
int result = await base.SaveChangesAsync(cancellationToken);

//By now., we have got the primary keys of added entries of added entiries because of the call to savechanges.
_coreTracker.AuditAdditions(userName, addedEntries, metadata);
if (AdditionTrackingEnabled) _coreTracker.AuditAdditions(userName, addedEntries, metadata);

//save changes to audit of added entries
await base.SaveChangesAsync(cancellationToken);
Expand All @@ -243,7 +278,9 @@ public virtual async Task<int> SaveChangesAsync(object userName, CancellationTok
/// <returns>Returns the number of objects written to the underlying database.</returns>
public virtual async Task<int> SaveChangesAsync(int userId)
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return await base.SaveChangesAsync(CancellationToken.None);
}
Expand All @@ -259,7 +296,9 @@ public virtual async Task<int> SaveChangesAsync(int userId)
/// <returns>Returns the number of objects written to the underlying database.</returns>
public virtual async Task<int> SaveChangesAsync(string userName)
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return await base.SaveChangesAsync(CancellationToken.None);
}
Expand All @@ -277,7 +316,9 @@ public virtual async Task<int> SaveChangesAsync(string userName)
/// </returns>
public override async Task<int> SaveChangesAsync()
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return await base.SaveChangesAsync(CancellationToken.None);
}
Expand All @@ -299,7 +340,9 @@ public override async Task<int> SaveChangesAsync()
/// </returns>
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
{
if (!TrackingEnabled)
if (!(AdditionTrackingEnabled ||
ChangeTrackingEnabled ||
DeletionTrackingEnabled))
{
return await base.SaveChangesAsync(cancellationToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ public class FluentConfigurationTests : PersistanceTests<TestTrackerContext>
[TestMethod]
public void Can_recognise_global_tracking_indicator_when_disabled()
{
GlobalTrackingConfig.Enabled = false;
GlobalTrackingConfig.AdditionsEnabled = false;
GlobalTrackingConfig.ChangesEnabled = false;
GlobalTrackingConfig.DeletionsEnabled = false;

EntityTracker
.TrackAllProperties<POCO>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,9 @@ public void Can_recognise_context_tracking_indicator_when_disabled()
NormalModel model = ObjectFactory.Create<NormalModel>();
Db.NormalModels.Add(model);

Db.TrackingEnabled = false;
Db.AdditionTrackingEnabled = false;
Db.ChangeTrackingEnabled = false;
Db.DeletionTrackingEnabled = false;
Db.SaveChanges();

model.AssertNoLogs(Db, model.Id);
Expand Down
Loading