在Controller中执行此方法时:
[Route("deleteIncCloseOut")]
[HttpDelete]
[AuditApi]
public bool deleteIncidentCloseOut(int ID)
{
try
{
using (ESSDataContext ctx = new ESSDataContext())
{
ctx.DeleteIncidentCloseOut(ID);
this.GetCurrentAuditScope().SetCustomField("Dynamic", new { IncidentCloseOutID = ID });
return true;
}
}
catch (Exception ex)
{
log.Error($"{ex.StackTrace}");
return false;
throw ex;
}
}
存储过程DeleteIncidentCloseOut(ID)
中存在一个异常,因此没有设置AuditEvent的CustomField。但是,DataProvider的InsertEvent仍在执行。
我的问题是在我的InsertEvent中,我必须填充两个表。一个表简要描述了审核事件,另一个表包含了设置为AuditEvent对象的CustomField的对象的属性和值。在这种情况下,我将创建一个以ID为属性的动态对象。因此,我在第一个表中获得一个条目,该事件IncidentCloseOut已被删除(但实际上并没有被删除,因为引发了异常),但是我没有在第二个表中获得所谓的已删除事件的ID。没有设置CustomField)。所以我得到虚假的审计信息。 最好,存储过程不会抛出异常,但是我希望审计是正确的,即使抛出异常也是如此。
如何纠正/改善这种情况?
答案 0 :(得分:0)
只需在调用发生异常的存储过程之前设置自定义字段 :
public bool deleteIncidentCloseOut(int ID)
{
try
{
using (ESSDataContext ctx = new ESSDataContext())
{
this.GetCurrentAuditScope().SetCustomField("Dynamic", new { IncidentCloseOutID = ID });
ctx.DeleteIncidentCloseOut(ID);
return true;
}
}
catch (Exception ex)
{
...
}
}