My goal is to add code for automatically tracking entities in the DbContext file when SaveChanges is called.
I created an interface called ITrackable with (CreatedBy, CreatedDate, UpdatedBy, UpdatedDate). Any of my entities that need to be tracked implement it.
In my DbContext I am trying to do something like the following:
public override int SaveChanges()
{
var entries = ChangeTracker.Entries();
foreach (var entry in entries)
{
if (entry.Entity is ITrackable trackable)
{
var now = DateTime.UtcNow;
var user = GetCurrentUser();
switch (entry.State)
{
case EntityState.Modified:
trackable.UpdatedDate= now;
trackable.UpdatedBy= user;
break;
case EntityState.Added:
trackable.CreatedDate = now;
trackable.CreatedBy = user;
trackable.UpdatedDate= now;
trackable.UpdatedBy= user;
break;
}
}
}
// Need to know what to return here...
}
- I am trying to figure out if this is the best way to still do this
- Doesn't the DbContext SaveChanges() return all types of different integers based on the situation. I don't want to be responsible for handling all of that now.
- If anyone has any better ways of doing this these days please let me know.