我有一个EDM,它包括实体扩展和历史。我的目标是使用历史记录来跟踪对扩展实体所做的所有更改。例如,如果ID为223的扩展名的属性“Name_Display”已更改 - 我希望历史记录实体记录此内容。
我在VB.NET中使用ASP.NET。在我的代码中,我把钩子说,“更新历史实体”,该钩子应该是什么样的?
答案 0 :(得分:2)
SavingChanges事件怎么样:
public override int SaveChanges(SaveOptions options)
{
foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified))
{
//DO STUFF like create history
}
return base.SaveChanges(options);
}
以下是可能有用的页面:http://msdn.microsoft.com/en-us/library/cc716714.aspx
编辑: 然后我认为这可能会有所帮助......
http://msdn.microsoft.com/en-us/library/bb896269.aspx
免责声明......我没有尝试比较原始值和旧值的经验
更改跟踪
对象图的更改跟踪信息存储在ObjectStateEntry对象中,这些对象由ObjectContext为每个附加对象创建。 ObjectStateEntry对象存储实体的以下信息:
- 确定实体身份的EntityKey。
- 对象的EntityState
- 关于相关对象的信息
- 实体集名称
- 实体属性的CurrentValues和OriginalValues(处于已添加状态的对象没有原始值)
- 实体修改后的属性的名称。
要查找属性值是否在对SaveChanges的调用之间发生了变化,请查询> GetModifiedProperties方法返回的已更改属性名称的集合...