【问题标题】:Log Difference in Entity Object before committing changes to DB在将更改提交到数据库之前记录实体对象中的差异
【发布时间】:2014-07-05 00:27:21
【问题描述】:

我想记录用户更新实体框架对象时的差异(整个对象图中的任何差异)。我现在一直在这个特定项目中使用 EF 版本 5。

对于每个说它是具有订单列表的客户。 我想输出客户字段中发生的变化(例如,总数或订单从 4 更改为 5)。然后输出每个订单的变化(比如订单 1 的状态从已订购变为已交付,并添加了订单 5)。

所以日志看起来像这样 客户修改 ID = 5,字段 TotalNumberOfOrders:原始值 4,新值 5 Customer.Order 添加的 ID = 10 Customer.Order 修改字段数量:原始值 = 15,新值 = 2

我只是要将这些值记录到磁盘中以进行一些诊断。

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

您可以注册 OnSavingChanges() 回调函数,该函数在将更改保存到 db 时被调用。 稍后您将记录原始/修改字段以供审核。

void OnSavingChanges(object sender, EventArgs e)
    {
        var modifiedEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
        foreach (var entry in modifiedEntities)
        {
            var modifiedProps = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).GetModifiedProperties();
            var currentValues = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).CurrentValues;
            //iterate and save changes to log for auditing.
        }
    }

【讨论】:

  • 我会试一试,如果可行,请接受作为答案。
猜你喜欢
  • 2016-12-09
  • 2012-03-23
  • 2012-11-23
  • 1970-01-01
  • 2023-03-03
  • 2015-01-31
  • 1970-01-01
  • 2011-09-24
  • 2020-06-18
相关资源
最近更新 更多