Вы должны действительно обернуть методы в try / catch, если вы пытаетесь предотвратить переполнение стека ошибками. Как правило, лучше размещать try / catch на верхних слоях, чтобы защитить пользователей от ошибок. Нижние уровни обычно генерируют исключения при исключительных обстоятельствах, вы должны пытаться перехватывать их только на более высоких уровнях.
Вы найдете, что ваш код гораздо более читабелен без множества блоков try / catch, я лично стараюсь избегать их, когда могу, и позволяю атрибуту фильтра MVC3 HandleError позаботиться об отображении сообщений об ошибках. Однако иногда вам может потребоваться повторить операцию, если она выдает исключение, что является хорошим кандидатом на попытку / отлов.
Взгляните на ELMAH - его использование должно помочь вам написать код, который в первую очередь избегает исключений. Но вы должны явно пытаться / ловить, если вы ожидаете исключения и хотите предпринять какое-то действие в ответ на него.