【发布时间】:2012-03-15 15:20:45
【问题描述】:
我有这个代码:
catch (Exception e)
{
try
{
transmitModel.AddAck(transmitBatchId,
"<error><message>" + e.Message + "</message><stack>" + e.StackTrace +
"</stack><Location>FromLisAtOMServer<Location>" +
"<TransmitBatchId>" + message.TransmitBatchId +
"</TransmitBatchId></error>", false, true);
}
// If we fail to log, we don't want that to bubble up...
// We want the real error to do that.
catch (Exception){}
// Re-throw the exception so that the service bus will
// move this off to the error queue.);
throw;
}
AddAck 方法会将该字符串保存到数据库中(使用实体框架)。
当我在没有最后一条语句 throw 的情况下运行它时,它会将我的错误消息保存到数据库中。
当我在那里有throw; 时,它说它可以保存,但是当我查询数据库时它不在那里。我什至可以在保存后(在代码中)通过我的数据上下文运行实体查询,它返回的值就像它已保存一样(尽管可能使用的是缓存版本)。但是如果我事后去查询,数据就不存在了....
我已检查以确保没有其他逻辑导致在异常时删除该值。
有什么可能导致这种情况的想法吗?
【问题讨论】:
-
听起来好像你没有提交数据库事务?
-
但是将日志提交到数据库的代码在哪里?
-
事务不是被栈中某处的 finally 语句回滚了吗?
-
您是否真的将 XML 保存到数据库中而不是填充列,还是服务调用?
-
@SimonWang - 作为答案发布,我会接受。
标签: c# .net entity-framework exception-handling nservicebus