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, прежде чем пытаться использовать его в рабочем коде.

Другие вопросы по тегам