How about the SavingChanges Event:
public override int SaveChanges(SaveOptions options)
{
foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified))
{
//DO STUFF like create history
}
return base.SaveChanges(options);
}
Here is a page that might help: http://msdn.microsoft.com/en-us/library/cc716714.aspx
EDIT:
Then I think this may help...
http://msdn.microsoft.com/en-us/library/bb896269.aspx
Disclaimer...I have no experience trying to compare orginal and old values
Change Tracking
Change tracking information for the object graph is stored in ObjectStateEntry objects, which are created by the ObjectContext for each attached object. ObjectStateEntry objects store the following information for the entities:
-The EntityKey that determines the identity of an entity.
-The EntityState for the object
-Information about related objects
-The entity set name
-The CurrentValues and OriginalValues of the entity's properties (objects in an Added state do not have original values)
-The names of the entity's modified properties.
To find if the value of a property has changed between the calls to SaveChanges, query >the collection of changed property names returned by the GetModifiedProperties method...