在将更改提交到DB之前记录实体对象中的差异

时间:2014-05-16 14:01:20

标签: c# entity-framework

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

For Each Say它是一个拥有订单列表的客户。 我想输出客户字段中已更改的内容(例如,总数或订单从4更改为5)。然后输出每个订单中更改的内容(例如订单状态从订购更改为已交付,并添加订单5)。

所以Log看起来像这样 客户修改ID = 5,字段TotalNumberOfOrders:原始值4,新值5 Customer.Order已添加ID = 10 Customer.Order Modified Field Quanity:Origanl Value = 15,New Value = 2

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

1 个答案:

答案 0 :(得分:0)

您可以注册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.
        }
    }