JetBrains Rider 2025.2 Help

代码检查:查询可能会为相关实体返回不完整的数据

此检查报告了在一组实体上执行查询(例如,使用 DbSet<T>.AsAsyncEnumerable() 方法)时,在查询中访问相关实体但未急切加载或未显式包含在查询中的情况。

当发生这种情况时,相关实体可能不会加载到内存中,从而导致这些实体的数据不完整或丢失。 这可能会导致意外行为或后续错误。

为避免此问题,您可以使用 包含() 方法急切加载相关实体,或者启用延迟加载,以便在访问相关实体时按需加载它们。

await foreach (var person in ctx.People.AsAsyncEnumerable()) { // do something foreach (var account in person.Accounts) { result.Append(account.Login); } }
await foreach (var person in ctx.People.Include(person => person.Accounts).AsAsyncEnumerable()) { // do something foreach (var account in person.Accounts) { result.Append(account.Login); } }

在上述示例中,代码使用 AsAsyncEnumerable() 异步迭代 人员DbSet ,但未急切加载每个 Person 实体的 帐户 导航属性。

由于迭代是异步执行的,在嵌套 foreach 循环可以执行之前,上下文可能已被释放或修改,导致某些 Person 实体的 帐户 集合不完整甚至为空。

为解决此问题,我们使用 包含() 方法急切加载每个 Person 实体的 帐户 导航属性。

最后修改日期: 2025年 9月 26日