Get all tracked entities from a DbContext?

c#, entity-framework

Solution

I think you can use the ChangeTracker for this:

public class MyContext : DbContext
{
    //...

    public override int SaveChanges()
    {
        foreach (var dbEntityEntry in ChangeTracker.Entries<AbstractModel>())
        {
            dbEntityEntry.Entity.UpdateDates();
        }
        return base.SaveChanges();

    }
}

Problem

Many of the tables in my database need to have a "DateCreated" and "DateModified" column. I want to update these columns whenever `SaveChanges()` is called. All my model objects inherit from a class `AbstractModel` to allow this kind of behavior. The class looks like this: ``` public abstract class AbstractModel { public virtual void UpdateDates() { } } ``` I then plan to override `UpdateDates()` in any child classes that have `DateCreated` and `DateModified` fields they need to maintain. To use this, I need to be able to get a list of all the entities that the `DbContext` is tracking, and call `UpdateDates()` on them if the object is marked as being `Added` or `Modified`. I can't seem to get access to wherever `DbContext` is storing this information. I can do `dbContext.Entry(object).State` to get the `EntityState` of a single entity, but I can't work out how to get a list of all tracked entities. How do I do this?

Original source

Related problems