public override saveChanges(){
var changeList = tracker.detectChange();
foreach(var change in changeList){
switch(change.state){
case ADD: ...
case MODIFIED: ...
}
}
base.saveChanges();
}

我有上面的代码结构(仅用于说明想法的伪代码),在保存更改时创建审计跟踪。
唯一的问题是,我无法获取新添加的记录ID,因为saveChanges
尚未被调用,但如果我提前调用saveChanges
,则跟踪器无法跟踪所有更改条目的状态将变为unchanged
!
那么如何在获取新记录ID时仍然跟踪更改?
EDITED
我可能想要获取新记录ID的原因是在DB中保存审计跟踪记录。出于某种原因,它必须是一个XML文档,它存储实体的ID,原始值和数据。新价值(以及其他一些不受关注的事情)。
说新添加的"项目"在DB的Item表中,我必须存储一个新的审计跟踪记录,至少显示这个新的"项目" ' ID,原始值(为空)和新值。
答案 0 :(得分:3)
在调用方法saveChanges
之前,可以根据状态将已更改的实体添加到单独的列表中。
在saveChanges
之后,所有实体都将使用新的ID更新,相应的列表可用于生成审核日志。
public override saveChanges(){
// gather audit data
initialize List<Entity> addedEntities, modifiedEntities, deletedEntities
var changeList = tracker.detectChange();
foreach(var change in changeList){
switch(change.state){
case ADD: add to addedEntities
case MODIFIED: add to modifiedEntities
}
}
base.saveChanges();
performAudit(addedEntities, modifiedEntities, deletedEntities);
}
function performAudit(...){
generateXML(...);
saveToDB(...);
sendEmail(...);
}
注意:我没有测试deletedEntities
是否仍然有效,但无论如何都可以在saveChanges之前审核它们,因为它们已经有了Id。但我希望你能对如何解决问题有所了解。