EF Core - FirstOrDefaultAsync генерирует исключение нулевой ссылки
Я пытаюсь протестировать контроллеры ASP.NET Core Web API с помощью XUnit. Я использую DBContext непосредственно в контроллере. В производстве я использую SqlServer, а для тестирования я использую провайдера InMemory. Когда я тестирую некоторый код, который использует EF Core FirstOrDefaultAsync
метод, приложение выдает исключение нулевой ссылки. Значение, которое я ищу, не существует в БД. Насколько я понимаю, он должен возвращать NULL, он не должен выдавать исключение.
Я пробовал что-то вроде where(x => x.Id = id).FirstOrDefaultAsync()
также выдает то же исключение нулевой ссылки.
Когда я попробовал что-то вроде
var exist = await list.AnyAsync(x => x.Id == id);
if(!exist)
{
return NotFound();
}
var user = await list.FirstAsync(x => x.Id == id);
return user;
Оно работает. И dbcontext, и свойство users получают значения, они не равны NULL.
Пожалуйста помоги.
1 ответ
Исключение не вызвано вашим кодом. Я смог воспроизвести его с помощью самой последней на тот момент EF Core 3.0 Preview 7. Это происходит с провайдером в памяти - FirstOrDefault[Async]
а также SingleOrDefault[Async]
методы. Не бывает с First[Async]
или же Single[Async]
,
В любом случае, основная проблема заключается в том, что вы используете предварительную (бета) программу, которая, как ожидается, будет иметь проблемы.
Просто переключитесь на последнюю стабильную версию EF Core 2 и дождитесь выпуска 3.0, прежде чем пытаться использовать его в рабочем коде.