我想在用户更新实体框架对象时记录差异(整个对象图中的任何差异)。我现在很难在这个特定的项目中使用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
我只是将这些值记录到磁盘上进行一些诊断。
答案 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.
}
}