【问题标题】:Entity Framework: Update Entity when Another Entity is Updated实体框架:更新另一个实体时更新实体
【发布时间】:2010-06-30 19:00:04
【问题描述】:

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

我将 ASP.NET 与 VB.NET 一起使用。在我的代码中,我在哪里放置了“更新历史实体”的钩子,该钩子应该是什么样子?

【问题讨论】:

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


    【解决方案1】:

    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(处于Added状态的对象没有原始值)

    -实体修改属性的名称。

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

    【讨论】:

    • 谢谢,我试试看。不过我想知道,此时我添加的任何历史逻辑都不会拉出缓存的保存值是多少?我想在它被改变之前得到它。
    • 这是一个很大的帮助。您是否碰巧知道一篇文章会向我展示如何在您拥有 //DO STUFF like create history 的地方开发代码?
    • 不,我没有,但我使用另一个 ORM 做了类似的事情。我基本上必须创建一个类(myhistoryitem.cs)来保存我想要记录的所有旧值和新值,并引用我为其保留历史记录的记录。然后我会在保存事件中保存该历史项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多