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

В метода EFContextProvider (EF6) SaveChangesCore обработката на изключенията изглежда така:

} 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 на всеки асинхронен бриз резултат. Breeze все пак ще направи разбивка, за да извлече „добро“ съобщение за грешка, но вече няма да скрие първоначалното изключение.

Оригиналната публикация по-долу -------------------

Това е интересен момент. Причината, поради която направихме това, беше, че повечето приложения от страна на клиента не са написани да навигират през веригата на изключенията и искахме да изложим най-„подходящата“ грешка на клиента. Повечето от приложенията, които разгледахме, просто разкриха свойството „error.message“ на клиента директно и с EF грешки това беше почти винаги безполезно.

Въпреки това мнението ви е добре разбрано. Мисля, че това, което трябва да направим, е да създадем ново изключение, което има съобщение от най-високо ниво, което е най-вътрешното съобщение за изключение, но все пак излага цялата верига на изключение за тези, които искат да разширят. Добавих вътрешна заявка за функция за това и ще се опитам да го пусна в скорошно издание (вероятно не следващото, защото вече го тестваме).

И благодаря за приноса.

person Jay Traband    schedule 21.11.2013