Как мне перехватить SqlException, вызванное RAISERROR в триггере, инициированном Entity Framework 4?

У меня настроена 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 ()?

7
задан user941238 24 February 2012 в 20:32
поделиться