Какое исключение .NET выдать для недопустимого состояния базы данных? - PullRequest
8 голосов
/ 13 апреля 2010

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

Я хотел бы использовать исключение System.IO.InvalidDataException, за исключением того, что я не имею дело с файловым потоком, поэтому это может ввести в заблуждение. Я закончил тем, что пошел с общим исключением приложения. У кого-нибудь есть идея получше?

Ответы [ 4 ]

16 голосов
/ 13 апреля 2010

InvalidDataException мне кажется довольно разумным:

  • Название идеально подходит
  • Описание подходит довольно разумно, если учесть, что это фактически «поток данных» из базы данных
  • Ничто в описании не упоминает файлы, так что я не буду беспокоиться об этой стороне вещей

Вы эффективно десериализуете данные из магазина. Это СУБД, но это относительно неважно. Данные неверны, поэтому InvalidDataException хорошо вписывается.

Другими словами - если бы вы загружали данные из файла , вы бы использовали InvalidDataException? Если предположить, что это так, то почему должно иметь значение, откуда поступают данные, с точки зрения создаваемого исключения?

6 голосов
/ 13 апреля 2010

Если вам нужно исключение, которое бы точно описывало ситуацию, с которой вы имеете дело, почему бы не сделать собственное исключение?

Просто унаследуйте его от System.Exception.

1 голос
/ 13 апреля 2010

У меня может возникнуть желание использовать одно из следующих действий:

InvalidConstraintException
NotSupportedException
OverflowException

Или просто создайте свое собственное: TooManyRowsException

0 голосов
/ 13 апреля 2010

Вы можете написать пользовательское исключение, если не найдете подходящего исключения-стандарта ...

Но вы говорите:

Даже если ссылочная целостность должен предотвратить это, я не хочу зависеть от администраторов баз данных никогда не меняя схему.

Когда кто-то меняет схему БД, изменения довольно велики, и вам придется внести некоторые изменения в код приложения / доступа к данным ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...