2016-05-19 5 views
0

Я пытаюсь использовать FirstOrDefault, чтобы получить товар из своего магазина. Если этого не существует, я хочу, чтобы он вернулся null.Исключение исключения FirstOrDefault вместо нуля

Я понимаю, что FirstOrDefault должен это сделать. База данных не существует, поэтому я ожидаю, что она вернет null, за исключением того, что она вызывает SQLException.

Почему это не возвращается null?

var setting = context.Settings.FirstOrDefault(s => s.ApplicationName == _applicationName && s.Name == name); 
+1

Что значит база данных не существует? Каков полный текст исключаемого исключения? Если базовая таблица не существует, то, конечно, она будет генерировать исключение, поскольку она не может первоначально запросить записи, которые вы ищете! –

+1

Какое исключение? вы упомянули, что база данных не существует, поэтому это исключение, FirstOrDefault работает, если существует база данных – DanielVorph

+0

Опубликовать полное сообщение с исключениями, потому что, как уже упоминалось, это, вероятно, выбрано из-за 'context.Settings' и' FirstOrDefault' даже никогда не вызывает. – evanmcdonnal

ответ

1

Это поведение по умолчанию. FirstOrDefault() генерирует исключение, если источник не существует. Null возвращается, когда источник делает, но конкретный объект не существует.

https://msdn.microsoft.com/en-us/library/bb340482(v=vs.100).aspx

+0

Правда, однако, если это действительно единственная проблема, исключение, которое будет выбрано, было бы ArgumentNullException. –

+0

Хорошая точка. Ваш ответ более точным для этой ситуации. Но замечательно, как многие думают .xOrDefault вернет null во всех ситуациях. –

+0

Удивительно, это то, что я хотел знать. благодаря – user3519261

3

Тот факт, что SQLException брошено говорит ваш, что проблема даже не спросив базу данных о данных, которые вы хотите работать. Как вы говорите, ваша «база данных не существует», я бы предположил, что это вызвано SQLException.

FirstOrDefault, скорее всего, даже не выполнен, так как доступ к объекту Settings уже сбрасывает SQLException.