【问题标题】:EF Core - FirstOrDefaultAsync throws Null Reference ExceptionEF Core - FirstOrDefaultAsync 抛出空引用异常
【发布时间】: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


【解决方案1】:

异常不是由您的代码引起的。我现在能够用最新的 EF Core 3.0 Preview 7 重现它。它发生在内存提供程序 - FirstOrDefault[Async]SingleOrDefault[Async] 方法上。 First[Async]Single[Async] 不会发生。

无论如何,这里的主要问题是您使用的是preview(测试版)软件,预计会有问题。

只需切换到最新的稳定 EF Core 2 版本并等待 3.0 版本,然后再尝试在生产代码中使用它。

【讨论】:

  • 我正在使用 EF Core v2.1 并遇到与 OP 完全相同的问题
  • @M.Ruiz 我怀疑它是一样的 - 这真的是 3.0 预览相关的,并且不想用最新的稳定 2.x 复制。可能是类似的东西。考虑问自己的问题,详细说明您的问题。
  • 对不起,但我没有问任何问题,我是说我在使用 LTS 的 v2.1 时遇到了同样的问题,或者至少我是这么想的。干杯伙伴。
  • 我也遇到了同样的问题。使用 v2.2。
  • 同样的问题,几天前我确实在stackoverflow上问过一个关于它的问题,虽然没有得到任何答案,但是我确实添加了一些代码来重现它。 >stackoverflow.com/questions/59500303/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2022-01-05
  • 1970-01-01
  • 2011-07-22
  • 2014-11-19
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多