我想实现一个受约束的'审计日志'属性更改到一组类中的属性。我已经成功地找到了如何设置CreatedOn | ModifiedOn类型的属性,但我无法找到如何'找到'已被修改的属性。实体框架4.1 DbContext覆盖SaveChanges审计属性更改
例子:
public class TestContext : DbContext
{
public override int SaveChanges()
{
var utcNowAuditDate = DateTime.UtcNow;
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
foreach (DbEntityEntry<IAuditable> dbEntityEntry in changeSet)
{
switch (dbEntityEntry.State)
{
case EntityState.Added:
dbEntityEntry.Entity.CreatedOn = utcNowAuditDate;
dbEntityEntry.Entity.ModifiedOn = utcNowAuditDate;
break;
case EntityState.Modified:
dbEntityEntry.Entity.ModifiedOn = utcNowAuditDate;
//some way to access the name and value of property that changed here
var changedThing = SomeMethodHere(dbEntityEntry);
Log.WriteAudit("Entry: {0} Origianl :{1} New: {2}", changedThing.Name,
changedThing.OrigianlValue, changedThing.NewValue)
break;
}
}
return base.SaveChanges();
}
}
那么,有没有访问与EF 4.1的DbContext这些细节的更改属性的方法吗?
这个工程,但似乎所有的属性都根据这个修改。将进一步调查,但对原来的问题罚款。我认为这给了我需要的东西。 – 2011-06-01 18:32:52
这不适合我。旧的价值永远是空的。这只适用于POCO和4.1及更高版本吗? – Jonx 2012-02-06 22:06:11
@Jonx:是的,它是EF 4.1('DbContext')和POCO。对于<= EF 4.0('ObjectContext'),你可以做类似的事情,唯一的区别是你不会覆盖SaveChanges,而是实现一个事件处理器('OnSavingChanges'或类似的,我不记得)。 – Slauma 2012-02-07 21:20:05