Мне нравится формализовать API моего DAL, заключив все исключения в несколько избранных и вложив фактическое исключение как InnerException
.
Например, все исключения базы данных, которые не являются ошибкой вызывающих абонентов, будут вызывать один тип исключения, все исключения базы данных, которые являются ошибкой вызывающих абонентов (например, не выбраны строки, недопустимый PK, недействительные данные), будут вызывать исключение другого типа (или, возможно, даже имеет более тонкое различие между типами исключений) и один последний тип исключений для вещей, которые не связаны с базой данных (проверки работоспособности, NullRef и т. д.), за исключением исключений, которые я не могу обработать (таких как OutOfMemoryException
).
Таким образом, легко поймать исключения, которые я добавляю в мой DAL, и все подробные подробности кровавых данных все еще доступны в InnerException
.