在将更改提交到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
我要把这些值记录到磁盘上,以便进行一些诊断。
您可以注册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.
}
}