数据库操作捕获异常及返回值的问题
来源:9-1 【应用】删除资源

赵胤淞
2020-08-23
- 请问老师,在Repository对数据库进行操作时,是否需要使用try catch来捕获可能发生的异常?或者是将try catch放在Controller中?
- 在项目中,Repository中Add或者Delete都是void,没有返回值,那Controller或者是前端怎么知道是不是插入或者删除成功了呢?
另外请问一下在实际生产情况下,都需要对哪些地方做异常捕获呢,谢谢。
写回答
1回答
-
问题一,try catch应该放在Controller中,如果出现异常会一层一层向上抛出,最后被controller接住,log也可以放在controller里。
问题二,这个问题非常好!Repository中Add或者Delete没有返回值是因为entity framework没有返回值,原因是调用Add()或Remove()函数的时候ef只是在内存中操作数据、并不会被立刻更新到数据库中,所以entity framework也没法告诉你操作是否成功。那Controller怎么知道插入或者删除是否成功了呢?就是在调用repository.saveAsync()的时候,才会真正提交数据库,这个时候如果出错你可以通过try catch接住错误。
一般来说,在IO操作、网络处理、数据库处理、类型转换这些地方都应该做可能异常处理。不过,一般来说,不需要特地去捕获异常,只需要在controller级别做try catch就足够应付大部分情况了。
异常捕获与日志的部分我在近期会给课程做一个升级,补充这部分的内容。
012020-08-24
相似问题