【发布时间】:2019-07-25 03:52:39
【问题描述】:
我正在尝试使用 XUnit 测试 ASP.NET Core Web API 控制器。我直接在控制器中使用 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 属性都有值,不为空。
请帮忙。
【问题讨论】:
-
这里的
list是什么?IEnumerable<User>对吗?你是怎么得到这份清单的?从上下文? -
@DeepakSharma 是的,列表是 DbSet
,它来自 DbContext。 -
@mjwills 它是 10。它是一个 InMemoryDatabase 上下文,我正在使用它进行测试。所以我将值硬编码为 10
-
我认为您需要提供minimal reproducible example。
-
@SamiKuhmonen 我无法确定哪个为空。我的代码中的两个对象都有值,看起来像是从框架中抛出的。
标签: c# entity-framework-core ef-core-3.0