问题一,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就足够应付大部分情况了。
异常捕获与日志的部分我在近期会给课程做一个升级,补充这部分的内容。