1

对于我的项目,我必须通过实体框架记录对我的对象所做的所有更改。这仅包括注册在哪个时间在哪个表上编辑了哪些字段。

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

如果有多个更改,将插入几行。

它已经适用于我 90% 的案例,我正在监听 ObjectContext 的 SavingChanges 事件

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

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

4

1 回答 1

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。

于 2010-09-15T11:34:22.330 回答