我花了一些时间阅读了一些关于审计追踪的文章和文章,但仍然无法弄清楚。首先用EF 4.2代码拦截并记录更改
我需要的是一个非常基本的审计系统,这将使我的结果,如:
- 客户“张三”是由
- 客户“李四”被创造“用户”“删除其他用户李四”
- 从地址‘用户’被修改‘’
- 客户‘其它用户‘
我’被删除’李四试图覆盖上的DbContext调用SaveChanges事件,但我被困具有以下问题:
public override int SaveChanges()
{
foreach (DbEntityEntry<IAuditable> entry in ChangeTracker.Entries<IAuditable>())
{
if (entry.State == EntityState.Added)
{
// since the object was not added yet, if I write to log in here and
// for some reason SaveChanges fail, I will end up with a fake log entry
}
else if (entry.State == EntityState.Modified)
{
// same in here
}
}
return base.SaveChanges();
// here the state for all entries have changed to Unchanged or Detached.
// detached is probably the one that was deleted however the “Unchanged”
// could be new or modified records.
}
我知道我可以使用数据库触发器上做到这一点,但我想保持它在这里让我有更多的控制在它之上,因为我不是一个SQL人,部署应用程序后,我不会有太多的控制数据库。
我很确定我在这里错过了很简单的东西。 我感谢任何帮助。
在此先感谢。
性能怎么样?在将DbContext转换为ObjectContext后保存数据不是较慢? – Saber
@Saber:DbContext内部使用ObjectContext,所以不应该有任何性能影响。 –