Почему методы "Get" и "GetAsync" в репозитории генерируют исключение EntityNotFoundException вместо возврата null, если объект не существует? - PullRequest
0 голосов
/ 09 мая 2019

Используя модуль module-zero-core-template (полностью обновленный), у меня недавно возникли проблемы, когда пользователь попросил удалить учетную запись (это было впервые), во многих местах в моем коде получал объект «Пользователь»используя Repository.Get (идентификатор TPrimaryKey) или Repository.GetAsync (идентификатор TPrimaryKey):

var user = _userRepository.Get(model.UserId);

До сих пор я не осознавал, что это вызывает исключение, когда сущность не существует, но мне пришлосьзамените все вызовы на (или эквивалентный асинхронный):

var user = _userRepository.FirstOrDefault(u => u.Id == model.UserId);

Мой код был создан не для обработки такого исключения, а в ответ только нулевое значение.

Мои вопросы:

  • Почему вместо пустого значения возвращается исключение?
  • Есть ли способ изменить это поведение?

Заранее спасибо.

1 Ответ

1 голос
/ 09 мая 2019

Это потому, что реализация делает это, как , что .

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

Редактировать (пояснение):

Это все равно, что сказать Single(x => x.Id == 1).Вы ожидаете результата, если его нет, он выдаст исключение.Вот почему у нас есть SingleOrDefault(expr) и SingleOrDefault(expr) или FirstOrDefault(expr) и First(expr).Тот же принцип вовлечен

...