如何在SaveChanges时用EF向DB写错误信息?

时间:2012-01-20 02:50:05

标签: entity-framework entity-framework-4

使用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。如何解决这个问题?

2 个答案:

答案 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 - 这将避免在错误保存期间发生错误时无限循环。