2012-01-20 36 views
0

使用EF,實體實例中的任何數據值都可以通過調用SaveChanges來保存回數據庫,SaveChanges可以被覆蓋以添加自定義操作。如何使用EF在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

在你的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

除了@ Eranga的建議使用單獨的上下文類型只是爲錯誤日誌記錄(它將映射僅Error實體)。這種新的上下文類型將不會被覆蓋SaveChanges - 這將避免錯誤保存期間錯誤觸發的無限循環。

相關問題