从DbContext获取所有跟踪的实体?

Oli*_*ver 16 c# entity-framework

我的数据库中的许多表都需要有一个"DateCreated"和"DateModified"列.我想在SaveChanges()调用时更新这些列.

我的所有模型对象都从类继承AbstractModel以允许这种行为.这个类看起来像这样:

public abstract class AbstractModel {
    public virtual void UpdateDates() { }
}
Run Code Online (Sandbox Code Playgroud)

然后,我计划覆盖UpdateDates()任何具有需要维护的子类DateCreated和子类DateModified.

要使用它,我需要能够获得DbContext正在跟踪的所有实体的列表,并UpdateDates()在对象被标记为Added或时调用它们Modified.

我似乎无法访问DbContext存储此信息的任何位置.我可以做dbContext.Entry(object).State,以获得EntityState单个实体的,但我不能工作,如何让所有跟踪的实体的列表.

我该怎么做呢?

nem*_*esv 22

我想你可以使用ChangeTracker:

public class MyContext : DbContext
{
    //...

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

    }
}
Run Code Online (Sandbox Code Playgroud)


Arw*_*win 5

接受的解决方案在这里是上面EF4比ObjectContext的建议更好-我们遇到的问题与实例的内存数据库,我们在测试范围内不与上述解决方案的工作以及(让分离状态在继承情景的一些修改的条目)使用.此解决方案使用DbContext本机方式检索跟踪的实体:

context.ChangeTracker.Entries()
        .Where (t => t.State == EntityState.Modified)
Run Code Online (Sandbox Code Playgroud)