实体框架:更新另一个实体时更新实体

时间:2010-06-30 19:00:05

标签: asp.net entity-framework entity-framework-4

我有一个EDM,它包括实体扩展和历史。我的目标是使用历史记录来跟踪对扩展实体所做的所有更改。例如,如果ID为223的扩展名的属性“Name_Display”已更改 - 我希望历史记录实体记录此内容。

我在VB.NET中使用ASP.NET。在我的代码中,我把钩子说,“更新历史实体”,该钩子应该是什么样的?

1 个答案:

答案 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方法返回的已更改属性名称的集合...