我需要一个建议。 有一个MVC动作,它通过一系列调用与数据库交互:Controller-> Service-> Repository-> DbContext。 如果存储库出现问题(实体框架抛出异常),我需要在存储库中捕获它,记录并传回控制器操作(用户必须知道尚未执行所需的操作)。 最好的方法是:
感谢。
答案 0 :(得分:0)
最重要的是不要丢失堆栈跟踪,通常最好的计划是让异常冒泡到最外层的try / catch,这样做可以确保只throw
而不是{{1} (在下面的代码中)。 throw ex
就像在代码中从该点抛出一个新的异常,可能会丢失重要的错误信息。最重要的是,当有人来修复存储库中发生的任何问题时,他们会获得所有错误详细信息。通常最好不要抓住隐藏真正的错误。
您可以捕获存储库并将成功/失败bool传回UI层。如果这样做,请确保记录整个堆栈跟踪和所有内部执行,请考虑从代码中的单个点调用存储库,然后记录所有异常,不同的日志记录,只需稍微不同的错误处理即可导致丢失错误的详细信息。
您在存储库中的try / catch可能如下所示:
throw ex
这已经在各种线程上进行了很多讨论,你应该阅读Throwing Exceptions best practices。