实体框架:观察保存在我的对象上的更改

时间:2010-09-15 06:54:03

标签: sql-server entity-framework watch

对于我的项目,我必须通过实体框架记录对象所做的所有更改。这只是为了在哪个表上注册哪些字段已被编辑。

粗略地说,将更改放在具有这种结构的表中: IDEvent,EventDate,TableName,RowID,FieldName,OldValue,NewValue

如果有多处更改,则会插入多行。

它已经适用于90%的情况,我正在收听ObjectContext的SavingChanges事件

我唯一的问题:在添加时,我的主键(由SQL(IDENTITY)生成)此时不存在(逻辑)在SavingChanges事件上,因为它尚未存储在数据库中,并且问题是我真的需要它(在我的表中填充我的RowID)

那么,你知道怎么做吗?我没有找到任何“ChangesSaved”事件。解决方法的想法?

1 个答案:

答案 0 :(得分:2)

您将无法在SavingChanges事件中执行此操作。我认为您可以为ObjectContext创建自己的包装器,并在SaveChanges的包装器方法中实现自己的逻辑。逻辑应该像

public class MyContextWrapper : IDisposable
{
  private ObjectContext _context;

  public void SaveChanges()
  {
    // Detect changes but do not accept them
    _context.SaveChanges(SaveOptions.DetectChangesBeforeSave); // SaveChanges(false) in .NET 3.5 SP1

    // TODO audit trail

    // Audit is completed so accept changes
    _context.AcceptAllChanges();
  }

}

您还应该将TransactionScope添加到新的SaveChanges。