【问题标题】:how to write error message to DB with EF when SaveChanges?SaveChanges时如何使用EF将错误消息写入数据库?
【发布时间】:2012-01-20 02:50:04
【问题描述】:

使用 EF,Entity 实例中的任何数据值都可以通过调用 SaveChanges 保存回数据库,该 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 失败时,我想获取异常并将错误消息保存到同一数据库中的表中。使用about代码,即使将数据保存到表errorlog,也应该调用SaveChanges。如何解决这个问题?

【问题讨论】:

    标签: entity-framework entity-framework-4


    【解决方案1】:

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

    【讨论】:

    • 这对我不起作用...有任何更新吗?
    【解决方案2】:

    除了@Eranga 的建议之外,使用单独的上下文类型仅用于错误记录(它只会映射Error 实体)。这种新的上下文类型不会覆盖SaveChanges - 这将避免在错误保存期间触发错误的情况下无限循环。

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多