Исключение из EF, не перехваченное промежуточным программным обеспечением ⇐ C#
Исключение из EF, не перехваченное промежуточным программным обеспечением
У меня есть глобальное промежуточное программное обеспечение, обрабатывающее исключения, создаваемые приложением. Он работает так, как и предполагалось, за исключением сбоев операций на уровне БД. Когда у меня возникает проблема, о которой сообщает Entity Framework (из-за неправильной конфигурации в определении Контекста или других операций, связанных с БД), исключение не сообщается, даже когда я прохожу выполнение во время отладки.< /п> Вместо этого возникает вот это (меня сбивающее с толку и разочаровывающее) явление. Выполняя приведенный ниже (правильный и теперь работающий) код, просто выходит из службы, перемещая желтую стрелку к оператору возврата контроллера, а затем появляется запрос, сообщающий 200 OK в Swagger (хотя и без данных).< /п> Вывод Thing[] = Context.Things .Include(a => a.SubThings) .Where(a => a.Id == id) .ToArray(); Обратите внимание, что приведенный выше пример работает, и никаких проблем не возникнет, если я не допущу ошибку в другом месте. Например, я сделал ляп, изменив List SubThings {get;set;}=[] модели домена на IEnumerable SubThings {get;set;}= [] (что исключает возможность добавления элементов в набор) и SubThing[] SubThings {get;set; (не разрешено для навигационных коллекций). (Примечание. Я знаю, почему возникают эти ошибки, и не спрашиваю, как их устранить. Это просто справочная информация для вопроса.)
Сначала после (слишком обширной) отладки я обнаружил проблему. Затем, окружив неудачную операцию методом try-catch, я обнаружил ошибку.
попробуй { Выход вещи [] = Context.Things .Include(a => a.SubThings) .Where(a => a.Id == id) .ToArray(); } catch (исключение исключения) { ... } Это меня смущает, и я чувствую, что что-то упускаю. У меня сложилось впечатление, что промежуточное программное обеспечение (зарегистрированное как самая внешняя область видимости) перехватит все. Неудачная операция выполняется внутри запроса, следовательно, передается множество других, «внутренних» промежуточных программ. С моей точки зрения, похоже, что исключения EF быстро выводят приложение из строя.
Поиск проблемы в Google привел к получению информации о том, как настроить промежуточное программное обеспечение и как исправить неправильно настроенное. На всякий случай я проверил их все, но нигде не заметил никакой информации, кроме подтверждения того, что я выполнил стандартные процедуры.
Также странно, что Swagger сообщает об этом 200 OK вместо 500 Internal Server Error
catch (исключение исключения) { throw; } но прекрасно с этим справляется
catch (исключение исключения) { throw new DedicatedCustomException(); } Однако мой вопрос конкретно заключается в том, действительно ли мне нужно использовать явную стратегию try-catch вместо неявного управления ошибками для всех плохих вещей. Если мне придется явно повторять try-catch при каждом вызове БД, это повлияет на размер базы кода.
У меня есть глобальное промежуточное программное обеспечение, обрабатывающее исключения, создаваемые приложением. Он работает так, как и предполагалось, за исключением сбоев операций на уровне БД. Когда у меня возникает проблема, о которой сообщает Entity Framework (из-за неправильной конфигурации в определении Контекста или других операций, связанных с БД), исключение не сообщается, даже когда я прохожу выполнение во время отладки.< /п> Вместо этого возникает вот это (меня сбивающее с толку и разочаровывающее) явление. Выполняя приведенный ниже (правильный и теперь работающий) код, просто выходит из службы, перемещая желтую стрелку к оператору возврата контроллера, а затем появляется запрос, сообщающий 200 OK в Swagger (хотя и без данных).< /п> Вывод Thing[] = Context.Things .Include(a => a.SubThings) .Where(a => a.Id == id) .ToArray(); Обратите внимание, что приведенный выше пример работает, и никаких проблем не возникнет, если я не допущу ошибку в другом месте. Например, я сделал ляп, изменив List SubThings {get;set;}=[] модели домена на IEnumerable SubThings {get;set;}= [] (что исключает возможность добавления элементов в набор) и SubThing[] SubThings {get;set; (не разрешено для навигационных коллекций). (Примечание. Я знаю, почему возникают эти ошибки, и не спрашиваю, как их устранить. Это просто справочная информация для вопроса.)
Сначала после (слишком обширной) отладки я обнаружил проблему. Затем, окружив неудачную операцию методом try-catch, я обнаружил ошибку.
попробуй { Выход вещи [] = Context.Things .Include(a => a.SubThings) .Where(a => a.Id == id) .ToArray(); } catch (исключение исключения) { ... } Это меня смущает, и я чувствую, что что-то упускаю. У меня сложилось впечатление, что промежуточное программное обеспечение (зарегистрированное как самая внешняя область видимости) перехватит все. Неудачная операция выполняется внутри запроса, следовательно, передается множество других, «внутренних» промежуточных программ. С моей точки зрения, похоже, что исключения EF быстро выводят приложение из строя.
Поиск проблемы в Google привел к получению информации о том, как настроить промежуточное программное обеспечение и как исправить неправильно настроенное. На всякий случай я проверил их все, но нигде не заметил никакой информации, кроме подтверждения того, что я выполнил стандартные процедуры.
Также странно, что Swagger сообщает об этом 200 OK вместо 500 Internal Server Error
catch (исключение исключения) { throw; } но прекрасно с этим справляется
catch (исключение исключения) { throw new DedicatedCustomException(); } Однако мой вопрос конкретно заключается в том, действительно ли мне нужно использовать явную стратегию try-catch вместо неявного управления ошибками для всех плохих вещей. Если мне придется явно повторять try-catch при каждом вызове БД, это повлияет на размер базы кода.
Re: Исключение из EF, не перехваченное промежуточным программным обеспечением
Хочется узнать больше про это
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Связь между промежуточным программным обеспечением авторизации и ядром фильтра Asp.net
Anonymous » » в форуме C# - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
.NET — интеграционное тестирование с промежуточным программным обеспечением (PACT)
Anonymous » » в форуме C# - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-