ИМХО, вы всегда должны ретранслировать эти исключения. Они там именно по этой причине. Если бы вам пришлось самостоятельно проверять уникальность поля, в чем смысл уникального атрибута? Для второй части вашего вопроса. Я думаю, что пользователь не должен нести ответственность за предоставление каких-либо уникальных данных. Следовательно, пользователю не должна предоставляться информация о том, что ваш уровень доступа к данным должен был разрешить любой конфликт уникальности. Честно говоря, я не могу придумать ни одной ситуации, требующей от пользователя предоставления уникального значения для всей базы данных, которое вы не могли бы создать за кулисами на уровне доступа к данным. Что касается того, как обрабатывать исключение, я думаю, что это зависит от характера данных. Я бы отбросил конфликтующий новый ввод или объединил бы данные, если бы мог.
Можете ли вы сказать что-нибудь еще о системе?