Исключение из EF, не перехваченное промежуточным программным обеспечениемC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Исключение из EF, не перехваченное промежуточным программным обеспечением

Сообщение Anonymous »


У меня есть глобальное промежуточное программное обеспечение, обрабатывающее исключения, создаваемые приложением. Он работает так, как и предполагалось, за исключением сбоев операций на уровне БД. Когда у меня возникает проблема, о которой сообщает 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 при каждом вызове БД, это повлияет на размер базы кода.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»