Вы действительно хотите действительно удалить записи пользователя? Вместо этого я бы предложил иметь «удаленный» флаг в вашей базе данных, поэтому, когда вы «удаляете» пользователя через пользовательский интерфейс, все, что он делает, это обновляет эту запись, чтобы установить флаг в 1. В конце концов, вы бы не хотели удалить пользователей, у которых были заказы и т. д.
Тогда вам просто нужно поддерживать этот флаг в соответствующих областях (т.е. не отображать «удаленных» пользователей в пользовательском интерфейсе).
Edit:
"... но только для концепции, предположим, что я хочу удалить пользователя, как мне это сделать?"
Прежде чем удалять запись пользователя, вам нужно будет удалить записи из других таблиц, которые ссылаются на этого пользователя (т.е. сначала удалить ссылки , а затем удалить ссылки записи). Но для меня это не имеет смысла, так как вы удалили бы, например, данные заказа.
Редактировать 2:
«И если да, то как определить, что это ограничение ССЫЛКИ SqlException?»
Чтобы обнаружить эту конкретную ошибку, вы можете просто проверить SqlException.Number - я думаю, что для этой ошибки вам нужно проверить на 547 (это номер ошибки в SQL 2005). В качестве альтернативы, если вы используете SQL 2005 и выше, вы можете полностью обработать эту ошибку в SQL, используя поддержку TRY ... CATCH :
BEGIN TRY
DELETE FROM User WHERE UserId = @MyUserId
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() = 547)
BEGIN
-- Foreign key constraint violation. Handle as you wish
END
END CATCH
Однако я лично выполню предварительную проверку, как вы предложили, чтобы сохранить исключение. Это легко сделать с помощью проверки EXISTS, например:
IF NOT EXISTS(SELECT * FROM [Orders] WHERE UserId=@YourUserId)
BEGIN
-- User is not referenced
END
Если есть еще таблицы, которые ссылаются на пользователя, вам также необходимо включить их в чек.