I have the following code to log changes using Entity Framework 6.
At the moment it only logs changes to a particular table - but I intend to expand it to cope with any table. I'm not sure of the best way to extract the table name.
I call this code before Db.SaveChanges
. Db is the DBContext.
private void LogHistory()
{
var entries = this.Db.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted)
.ToList();
foreach (var entry in entries)
{
foreach (string o in entry.CurrentValues.PropertyNames)
{
var property = entry.Property(o);
var currentVal = property.CurrentValue == null ? "" : property.CurrentValue.ToString();
var originalVal = property.OriginalValue == null ? "" : property.OriginalValue.ToString();
if (currentVal != originalVal)
{
if (entry.Entity.GetType().Name.Contains("PropetyPair"))
{
// make and add log record
}
}
}
}
}
SaveChanges()
? – James Khoury Jan 16 at 23:56