Extend base type and automatically update audit information on Entity
- by Nix
I have an entity model that has audit information on every table  (50+ tables)
 CreateDate
 CreateUser
 UpdateDate
 UpdateUser
Currently we are programatically updating audit information.  
Ex: 
  if(changed){
        entity.UpdatedOn = DateTime.Now;
        entity.UpdatedBy = Environment.UserName;
        context.SaveChanges();
   }
But I am looking for a more automated solution.   During save changes, if an entity is created/updated I would like to automatically update these fields before sending them to the database for storage.  
Any suggestion on how i could do this?  I would prefer to not do any reflection, so using a text template is not out of the question.
A solution has been proposed to override SaveChanges and do it there, but in order to achieve this i would either have to use reflection (in which I don't want to do ) or derive a base class.  Assuming i go down this route how would I achieve this?  
For example
EXAMPLE_DB_TABLE
 CODE
 NAME
 --Audit Tables
 CREATE_DATE
 CREATE_USER
 UPDATE_DATE
 UPDATE_USER
And if i create a base class 
 public abstract class IUpdatable{
     public virtual DateTime CreateDate {set;}
     public virtual string CreateUser { set;}
     public virtual DateTime UpdateDate { set;}
     public virtual string UpdateUser { set;}
 }
The end goal is to be able to do something like...
   public overrride void SaveChanges(){
        //Go through state manager and update audit infromation
        //FOREACH changed entity in state manager
        if(entity is IUpdatable){
           //If state is created... update create audit.
           //if state is updated... update update audit
        }
   }
But I am not sure how I go about generating the code that would extend the interface.