Unfortunately there is no SavingChanges event on the code first DbContext, but there is a way to get to it.
The DbContext used for data access with Entity Framework Code First has a simplified API compared to the ObjectContext which is good. Unfortunately it is a bit too simple sometimes. For example there is no built in event that can be used to act before pending changes are written to the database. Fortunately, there is a way to get to the underlying ObjectContext which has such an event.
[TestMethod]
public void TestSavingChanges()
{
using (var ctx = new CarsContext())
{
var objCtx = ((IObjectContextAdapter)ctx).ObjectContext;
bool eventCalled = false;
objCtx.SavingChanges += (sender, args) => eventCalled = true;
ctx.SaveChanges();
Assert.IsTrue(eventCalled);
}
}
Of course it would be really simple to create an own event inside an override of SaveChanges but having a built in one is even more simple. There is also a ObjectMaterialized event that is fired each time an object is loaded from the database as well as some additional methods and properties that are not available directly on the DbContext.