Возврат типа C# EFCore с нулевым значением по сравнению с не найденной или множественной записью базы данныхC#

Место общения программистов C#
Anonymous
Возврат типа C# EFCore с нулевым значением по сравнению с не найденной или множественной записью базы данных

Сообщение Anonymous »

У меня есть следующий вариант использования.
База данных содержит запись с полем, допускающим значение NULL, и я хотел бы запросить из базы данных только это значение для одной записи.
Это можно легко сделать с помощью этого Linq-запроса:

Код: Выделить всё

var value = await context.Table
.Where(r => r.Id == recordId)
.Select(r => r.Field)
.SingleOrDefaultAsync();
Это вернет значение поля или «ноль», если запись не существует.

Поэтому, когда поле имеет значение, мы получаем это значение. Но когда поле имеет значение «null», вы также получаете «null».
И здесь начинается моя проблема.

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

Код: Выделить всё

try {
var value = await context.Table
.Where(r => r.Id == recordId)
.Select(r => r.Field)
.SingleAsync();
}
catch
{
throw new NotFoundException("");
}
Но, во-первых, я бы предпочел не полагаться на перехват исключения с помощью try/catch, поскольку мы обычно возвращаем te 'Task' и не ожидаем вызова базы данных внутри функции.
И во-вторых: таким образом мы не можем отличить несуществующие записи от ситуации, когда у нас может быть несколько записей (при использовании разных предложенийwhere).>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ase-record

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