У меня настроена Entity Framework для обновления таблицы. Обновление перехватывается триггером вместо, который вызывает RAISERROR:
CREATE TRIGGER mySchema.UpdateBusinessObjects
ON mySchema.BusinessObjects
INSTEAD OF UPDATE
AS
RAISERROR(''test error from SQL'',16,1)
RETURN
В моем классе репозитория я пытаюсь перехватить SqlException, сгенерированное оператором RAISERROR в SQL:
public void SaveBusinessObject(BusinessObject b) {
try {
repo.Entry(b).State = EntityState.Modified;
repo.SaveChanges();
} catch (SqlException ex) {
// handle exception here
}
}
Проблема в том, что C # не перехватывает SqlException; оно передается вызывающей стороне как необработанное исключение («SqlException не было обработано пользователем: ошибка теста из SQL»). Что?!
Похоже, что функция SaveChanges () EF каким-то образом передает исключение через мой блок try catch. Я попытался переключить свой оператор catch на catch (Exception ex) на случай, если исключение EF носит более общий характер, но я все равно получаю необработанное исключение SqlException. Я что-то упустил здесь? В чем проблема с методом SaveChanges ()?