Asp.net 实体框架:更新另一个实体时更新实体

Asp.net 实体框架:更新另一个实体时更新实体,asp.net,entity-framework,entity-framework-4,Asp.net,Entity Framework,Entity Framework 4,我有一个EDM,它包括实体扩展和历史。我的目标是使用历史记录来跟踪对扩展实体所做的所有更改。例如,如果ID为223的扩展名的属性“Name\u Display”发生了更改,我希望历史实体记录这一点 我正在使用ASP.NET和VB.NET。在我的代码中,我把钩子放在哪里说“更新历史实体”以及该钩子应该是什么样子?SavingChanges事件如何: public override int SaveChanges(SaveOptions options) { foreach (Object

我有一个EDM,它包括实体扩展和历史。我的目标是使用历史记录来跟踪对扩展实体所做的所有更改。例如,如果ID为223的扩展名的属性“Name\u Display”发生了更改,我希望历史实体记录这一点


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

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);
}
以下是一个可能有帮助的页面:

编辑: 那么我想这可能会有帮助

免责声明…我没有尝试比较原始值和旧值的经验

变更跟踪

对象图的更改跟踪信息存储在ObjectStateEntry对象中,该对象由ObjectContext为每个附加对象创建。ObjectStateEntry对象存储实体的以下信息:

-确定实体标识的EntityKey

-对象的EntityState

-有关相关对象的信息

-实体集名称

-实体属性的CurrentValue和OriginalValue(处于添加状态的对象没有原始值)

-实体修改属性的名称

要查找在调用SaveChanges之间属性的值是否已更改,请查询>GetModifiedProperties方法返回的已更改属性名称的集合


谢谢,我试试看。不过我想知道,在这个关头,我添加的任何历史逻辑都不会拉取缓存的保存值吗?我想在更改之前获取值。这是一个很大的帮助。你知道有一篇文章会告诉我如何开发代码,你已经做了//创建历史之类的事情吗?不知道,但是我已经用另一个ORM做了类似的事情。基本上,我必须创建一个类(myhistoryitem.cs)来保存我想要记录的所有新旧值,并引用我保存历史记录的记录。然后,我会在保存事件中保存该历史项目。