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

本文关键字:实体 记录 对象 提交 DB | 更新日期: 2023-09-27 18:03:53

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

For Each假设它是一个有订单列表的客户。我想输出客户字段中的变化(例如,总数或订单从4更改为5)。然后输出每个订单中的变化(例如,订单1状态从订购更改为交付,订单5被添加)。

Log看起来是这样的客户修改ID =5,字段TotalNumberOfOrders:原始值4,新值5客户。订单添加ID = 10客户。订单修改字段数量:原值= 15,新值= 2

我要把这些值记录到磁盘上,以便进行一些诊断。

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

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