对于我的项目,我必须通过实体框架记录对象所做的所有更改。这只是为了在哪个表上注册哪些字段已被编辑。
粗略地说,将更改放在具有这种结构的表中: IDEvent,EventDate,TableName,RowID,FieldName,OldValue,NewValue
如果有多处更改,则会插入多行。
它已经适用于90%的情况,我正在收听ObjectContext的SavingChanges事件
我唯一的问题:在添加时,我的主键(由SQL(IDENTITY)生成)此时不存在(逻辑)在SavingChanges事件上,因为它尚未存储在数据库中,并且问题是我真的需要它(在我的表中填充我的RowID)
那么,你知道怎么做吗?我没有找到任何“ChangesSaved”事件。解决方法的想法?
答案 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。