所以我想跟踪对我的任何对象所做的最后一次更改,最后一次更改保存在“头”对象上。我会画出来的。
我有一个Project
包含 列表的对象,该列表Activities
又具有Actions
具有不同属性的列表,依此类推。Project
有一个属性LastUpdateDate
,我想在其上保持对自身或其任何“子对象”的任何属性的最后更新Project
。
为此,我重写了SaveChanges
实体框架的方法,如下所示:
public override int SaveChanges() {
var changedEntries = ChangeTracker.Entries();
if (changedEntries != null)
{
var dbEntityEntries = changedEntries as IList<DbEntityEntry> ?? changedEntries.ToList();
foreach (var entry in dbEntityEntries.Where(c => c.State != EntityState.Unchanged))
{
var proj = entry.Entity as Project;
if (proj != null)
{
proj.LastUpdateDate = DateTime.UtcNow;
}
var prop = entry.Entity as Activity;
if (prop != null)
{
var changedProject = dbEntityEntries.Single(x => (x.Entity is Project) && ((Project) x.Entity).Id == prop.ProjectId);
((Project) changedProject.Entity).LastUpdateDate = DateTime.UtcNow;
}
}
}
return base.SaveChanges();
}
我的数据集比上面的示例更大并且具有更多属性,因此我不想遍历每个实体,因为这会占用太多时间。
取而代之的是,我想访问我ObjectContext
的,例如:project[0].Activity[1]...
这里有没有人知道如何达到这种情况?