2010-06-30 186 views
1

我有一个EDM,它包括实体扩展和历史记录。我的目标是使用历史记录来跟踪对扩展实体所做的所有更改。例如,如果ID为223的扩展名的属性'Name_Display'已更改 - 我希望历史实体记录此信息。实体框架:更新实体时更新另一个实体

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

回答

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

免责声明...我没有经验试图比较为对象曲线E原单和旧值

变化跟踪

变化跟踪信息存储在ObjectStateEntry对象,其通过的ObjectContext为每个连接的对象创建的。 ObjectStateEntry对象存储实体的以下信息:

- 确定实体身份的EntityKey。

-The EntityState为对象

- 信息有关相关对象

-The实体集名称

-The CurrentValues和实体的属性OriginalValues(在加状态的对象不具备原始值)

- 实体的修改属性的名称。

要了解,如果属性的值的调用的SaveChanges,查询>由GetModifiedProperties方法返回更改的属性名称的集合之间改变......

+0

谢谢,我给一个尝试。我想知道,在这个时候,我不会添加任何历史逻辑,只是拉什么是缓存保存值?我想在改变之前获得价值。 – davemackey 2010-06-30 19:19:44

+0

这是一个很好的帮助。你碰巧知道一篇文章会告诉我如何开发代码,如果你有创建历史记录? – davemackey 2010-06-30 20:10:19

+0

不,我不会,但我已经做了类似的使用另一个ORM。我基本上必须创建一个类(myhistoryitem.cs)来保存我想记录的所有旧值和新值,并引用我保留历史记录的记录。然后,我会在保存事件中保存历史记录。 – AGoodDisplayName 2010-06-30 21:31:09