2013-11-13 1 views
1

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

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

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

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

ответ

2

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

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

Оригинал сообщения Ниже -------------------

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

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

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