【问题标题】:What is the best way to handle ObjectDataSource exceptions?处理 ObjectDataSource 异常的最佳方法是什么?
【发布时间】:2009-04-18 12:17:17
【问题描述】:

我在 ASPX 页面中有一个 ObjectDataSource,它从业务逻辑类调用 CRUD 操作。当这些操作期间发生异常时,我想通知用户错误并记录它们。但我希望我的业务逻辑和表示层之间有一个清晰的分离。我知道 Selected、Inserted、Updated、Deleted 事件提供了一个 ObjectDataSourceStatusEventArgs 类型的参数,其中包括一个属性“Exception”,用于表示发生的异常。

这些事件的处理程序是处理 ObjectDataSource 异常的最佳位置还是有更好的方法?事件参数的 Exception 属性是否将操作过程中发生的所有异常都链了起来?

欢迎任何cmets或建议,

谢谢,

库伦

【问题讨论】:

    标签: c# asp.net objectdatasource


    【解决方案1】:

    当您的 Biz 层对象执行 CRUD 操作期间引发异常时,它应该由 Biz 对象处理,但只是部分处理。这是因为您希望反馈到达表示层(并且您还希望记录错误)。因此,您可以:

    一个。按原样重新抛出异常。这会将其冒泡到您的 Presentation 层。

    b.向异常的Data 属性添加名称-值数据对,然后重新抛出它。

    c。将引发的异常包装成自定义异常类型并抛出它。

    然后,此异常将冒泡到您的 ObjectDataSource,并通过 Selected/Inserted/Deleted/Updated 事件处理程序中的 ObjectDataSourceStatusEventArgs.Exception 属性提供。然后,您应该检查此属性是否为 Null。如果没有,ObjectDataSource 会在TargetInvocationException 包装器中包装任何异常(是的,复数!),因此您可能需要处理InnerException。

    然后您可以修改 UI 元素以向用户提供操作未成功完成的必要反馈。此外,您需要将 ExceptionHandled 属性设置为 True 以防止异常冒泡到页面级别。

    至于记录异常,就个人而言,我会在两个层中记录错误 - 业务逻辑层和表示层。

    【讨论】:

      【解决方案2】:

      如果业务逻辑层的方法被自动调用,我会使用这些事件。

      我认为这些事件的目的是:以某种自定义方式显示错误。

      但我不会自动调用逻辑层中的方法。相反,我将通过代码调用它们,并返回一个布尔值,指示操作是否成功。

      插入/更新人时类似这样:

      if (Person.Save(data)) {
        // show OK message
      } else {
        // show error message
      }
      

      其中 Person 是相对于 Person 数据访问层类的 BAL 类。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-04-29
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多