Asp.net mvc 实体框架中的异常处理,带存储库模式的MVC
我将实体框架用于我的项目,MVC作为前端,我已经用存储库模式实现了工作单元模式 我在存储库的顶部有一个服务层来处理业务 我的问题是在哪里处理异常?Asp.net mvc 实体框架中的异常处理,带存储库模式的MVC,asp.net-mvc,entity-framework,exception,repository-pattern,unit-of-work,Asp.net Mvc,Entity Framework,Exception,Repository Pattern,Unit Of Work,我将实体框架用于我的项目,MVC作为前端,我已经用存储库模式实现了工作单元模式 我在存储库的顶部有一个服务层来处理业务 我的问题是在哪里处理异常? 将所有异常传递到表示层并在控制器中处理是一个好主意,还是我需要在底层处理它?好吧,一般的想法是不让UI处理所有异常,这也没有多大意义。假设您有一个使用ADO.NET实现的数据层。这里的一般模式是在数据层中处理SqlException,然后将SqlException包装在更具意义的DatabaseLayerException中,这是上层应该处理的概念-
将所有异常传递到表示层并在控制器中处理是一个好主意,还是我需要在底层处理它?好吧,一般的想法是不让UI处理所有异常,这也没有多大意义。假设您有一个使用ADO.NET实现的数据层。这里的一般模式是在数据层中处理SqlException,然后将SqlException包装在更具意义的DatabaseLayerException中,这是上层应该处理的概念-您一直遵循此模式,因此您可以拥有InfrastructureException、ApplicationException等功能 在最上面,您捕获所有未处理的ApplicationException(并使所有异常继承此多态性),然后捕获所有未处理的异常,作为不太可能发生的特殊情况,并尝试从中恢复
我还建议使用日志记录,可以是手动的,也可以是AOP——你会在网上找到大量的资源(可能是Log4Net?)我认为在任何异常处理策略中,你都有以下选择:
- 若可能,要从异常中恢复(例如,实例服务器已关闭,请稍等片刻,然后重试)
- 忽略异常,因为它不够严重或其他任何原因
- 把它往上吹。这里有多种策略,比如一个
抛出代码>或
抛出新异常(“消息”,InnerException)代码>来列举一些