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)
接受的解决方案在这里是上面EF4比ObjectContext的建议更好-我们遇到的问题与实例的内存数据库,我们在测试范围内不与上述解决方案的工作以及(让分离状态在继承情景的一些修改的条目)使用.此解决方案使用DbContext本机方式检索跟踪的实体:
context.ChangeTracker.Entries()
.Where (t => t.State == EntityState.Modified)
Run Code Online (Sandbox Code Playgroud)