【问题标题】:Best practice to handle exceptions处理异常的最佳实践
【发布时间】:2012-07-18 12:50:11
【问题描述】:

我有一个 ASP.NET (Webforms) 项目,使用 实体框架企业库 进行异常处理/记录。 保存到数据库时处理异常的最佳做法是什么。

我是否应该只使用异常处理块配置企业库来处理所有异常。或者我应该用 try/catch 包围每个 save 语句并在每个 catch 语句中处理异常。我希望这是有道理的。

【问题讨论】:

    标签: asp.net entity-framework enterprise-library


    【解决方案1】:

    您应该始终根据您的应用程序业务逻辑处理已知的预期异常,否则放手让企业库记录它。

    另一个经验法则是,无论是否处理了异常,都会将您的应用程序状态/流程中断为意外状态,您应该让它失败。

    示例:

    class Programs
    {
        static void Main(string[] args)
        {
            try
            {
                Print_String(null);
            }
            catch (System.ArgumentException ex)
            {
                Console.WriteLine("{0}", ex.Message);
            }
            //catch (Exception ex)
            //{
               //no no
            //}
            Console.ReadLine();
        }
    
        private static void Print_String(string str)
        {
            if (str == null)
            {
                throw new ArgumentNullException("str");
            }
            else
            {
                Console.WriteLine(str);
            }
        }
    }
    

    【讨论】:

    • 但我不确定......如果我用 try/catch 包围我的数据库保存操作 (SaveChanges()),我应该处理什么样的异常。我能想到的唯一例外是 OptimisticConcurrencyException
    • 您必须查看可能在您的 SaveChanges() 方法中抛出的异常,并且可以由您的业务逻辑处理,只有您可以确定。
    • 哦,我的应用程序很简单,数据库架构类似于北风数据库。你知道任何好的链接/例子吗?例如,让我们以北风数据库为例,如果我保存一个新类别,我应该考虑处理什么样的异常?再次感谢您的帮助:)
    • 我建议您阅读一般的异常处理,但 SqlExceptions 可能是您遇到的最常见的异常。 ASP.NET Web 应用程序的异常处理建议:4guysfromrolla.com/articles/081209-1.aspx
    【解决方案2】:

    有了轮子,就不需要重新发明轮子了。企业库是处理异常的好方法。

    【讨论】:

    • 这没有回答问题
    【解决方案3】:

    页面级异常

    Add a Page_Error() method to your page and handle the exceptions here
    

    应用级异常:

    Add your code in the global.asax event Application_Error() to manage exceptions
    

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 2017-05-11
      • 2013-05-09
      • 2011-11-10
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多