The term best practice usually depends greatly on the problem and situation. There are a couple of ways you could achieve this behaviour.
First of all, do you want all changes made to objects to be tracked, or is it just the changes that are applied to the database. If it is the latter the context class provides an API that you can use to have a look at the changes that will be persisted just before calling SaveChanges(). You can use context.GetChanges for this (for a more comprehensive explanation have a look at this article).
You could easily wrap all SaveOperations in a UnitOfWork pattern where you could perform the needed logging. Actually doing separate repositories for each entity that do not have a save changes method and a unit of work implementation (for saving changes) is something that we are working on for one of our best practice examples, that will be revamped for Q3.
It will not be a problem to provide a sneak peek of what we are thinking of in a demo, should you request it (please open a support ticket if you do).
I hope this helps.
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward!
We'd appreciate your vote for Telerik in this year's SQL Server Community Awards. We are competing in TWO categories and every vote counts! VOTE for Telerik NOW >>