Ничего себе,
Прежде всего можете Вы дистиллировать вопрос вниз немного, в то время как было хорошо считать хорошо продуманный и объясненный вопрос, который был довольно много к обзору.
Короткий ответ - "да", но он может зависеть.
File.Exists
ляп).По-моему:
Я сделал бы обоих. Если я могу перестать работать быстро и обеспечить лучший пользовательский опыт, большой. Любой ожидал SQL (или любой другой), исключения должны становиться пойманными и возвращенными соответственно так или иначе.
Я знаю, что существует согласие, что исключения не должны использоваться для кроме исключительных обстоятельств, но помнить, мы пересекаем границы приложения здесь, ничего не ожидаем. Как я сказал, это похоже File.Exists
, нет никакого смысла, это может быть удалено перед доступом к нему так или иначе.
Ваш вывод является абсолютно правильным. Исключения не находятся просто на этот раз в синем лунными ситуациями, но и специально для создания отчетов кроме ожидаемых результатов.
В этом случае проверка внешнего ключа все еще произошла бы, и исключениями является механизм, которым Вы можете быть уведомлены.
То, что Вы не должны делать, поймать и подавить исключения с общим всеобъемлющим оператором. Выполнение мелкомодульной обработки исключений состоит конкретно в том, почему исключения были разработаны во-первых.
Я думаю, что Вы правы, исключения должны только использоваться для обработки неожиданных результатов, вот, пожалуйста с помощью исключения для контакта с возможно ожидаемым результатом, необходимо иметь дело с этим случаем явно, но все еще поймать исключение для показа возможной ошибки.
Если это не способ, которым этот случай обрабатывается все всюду по коду, я принял бы сторону Вас. Проблема производительности должна только быть поднята, если бы это - на самом деле проблема, т.е. это зависело бы размера тех таблиц и количества раз, эта функция используется.
Нет ничего неправильно с тем, что Вы делаете. Исключения не являются nessesarily "исключительными". Они существуют, чтобы позволить вызывающим объектам иметь мелкомодульную обработку ошибок в зависимости от своих потребностей.
Деликатный вопрос. Однако я нахожу ответы... страшными!
Исключением является своего рода GOTO.
Мне не нравится использовать исключения таким образом, потому что это приводит к запутанному коду.
Простой как это.
Я рекомендовал бы назвать хранимую процедуру, которая проверяет, существуют ли какие-либо зависимости, то удаляет, если нет никого. Тем путем проверка на целостность сделана.
Конечно, Вы, вероятно, хотели бы другую хранимую процедуру для одиночного элемента, удаляет по сравнению с пакетным удалением... Пакет удаляет, мог искать дочерние строки и возвратить назад ряд записей, которые не имели право на объем, удаляют (имел дочерние строки).
Ловля определенного SqlException является правильным поступком. Это - механизм, которым SQL Server передает условие внешнего ключа. Даже если Вы могли бы одобрить другое использование механизма исключения, это - то, как SQL Server делает это.
Кроме того, во время Вашей проверки на этих четырех таблицах некоторый другой пользователь мог бы добавить связанную запись, прежде чем Ваша проверка будет завершена, но после чтения той таблицы.