使用EF,可以通过调用SaveChanges将Entity实例中的任何数据值保存回数据库,可以覆盖SaveChanges以添加自定义操作。
所以我尝试以下列方式覆盖SaveChanges:
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
try
{
return base.SaveChanges(options);
}
catch (Exception ex)
{
//error log here
//write the error message to database table errorlog
throw ex;
}
}
当SaveChange失败时,我想获取异常并将错误消息保存到同一数据库中的表。有了代码,甚至将数据保存到表错误日志,也应该调用SaveChanges。如何解决这个问题?
答案 0 :(得分:2)
在catch块中初始化一个新的上下文实例并记录错误。
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
try
{
return base.SaveChanges(options);
}
catch (Exception ex)
{
var context = new MyContext();
// your log class instance populated with relevant details
var error = new Error { Message = ex.Message; };
context.Errors.AddObject(error);
context.SaveChanges();
throw;
}
}
答案 1 :(得分:1)
除了@ Eranga的建议外,还使用单独的上下文类型进行错误记录(它只映射Error
实体)。这个新的上下文类型不会覆盖SaveChanges
- 这将避免在错误保存期间发生错误时无限循环。