Breeze EF6 SaveChanges не распространяет исключения

В методе SaveChangesCore EFContextProvider (EF6) обработка исключений выглядит следующим образом:

} catch (Exception e) {
while (e.InnerException != null) {
e = e.InnerException;
}
throw e;
}

Это вызывает только самое внутреннее исключение и скрывает соответствующую информацию, обнаруженную внешними исключениями.

Когда процесс SaveChanges проходит через несколько уровней, следующее прямое исключение уровня теряется, и выдается только последнее исключение в цепочке. Это не позволяет правильно обрабатывать исключения для вызывающего.


person javsacin    schedule 13.11.2013    source источник


Ответы (1)


Обновленное сообщение

Начиная с Breeze 1.4.6, любые исключения .NET, созданные на сервере, теперь доступны в их исходной форме в свойстве httpResponse.data любого результата async breeze. Breeze по-прежнему будет детализировать, чтобы извлечь «хорошее» сообщение об ошибке, но больше не будет скрывать исходное исключение.

Исходное сообщение ниже -------------------

Это интересный момент. Причина, по которой мы это сделали, заключалась в том, что большинство клиентских приложений не написано для навигации по цепочке исключений, и мы хотели показать клиенту наиболее «релевантную» ошибку. Большинство приложений, которые мы рассматривали, просто напрямую открывали клиентское свойство error.message, а с ошибками EF это почти всегда было бесполезно.

Однако ваша точка зрения хорошо понята. Я думаю, что нам нужно создать новое исключение, которое имеет сообщение верхнего уровня, которое является самым внутренним сообщением об исключении, но все же раскрывает всю цепочку исключений для тех, кто хочет детализировать. Я добавил для этого внутренний запрос функции и постараюсь включить его в ближайший выпуск (вероятно, не в следующий, потому что мы уже тестируем его).

И спасибо за вклад.

person Jay Traband    schedule 21.11.2013