c# - Entity Framework Core 5.0 警告限制运算符 ('Skip'/'Take' ) 没有 'OrderBy' 运算符

标签 c# asp.net-core entity-framework-core

我正在编写一个 .net Core 3.1 应用程序,最近将其更新为 Entity Framework Core 5.0。此后运行应用程序开始显示警告,如下所示:

The query uses a row limiting operator ('Skip'/'Take') without an 'OrderBy' operator. This may lead to unpredictable results.


我已经查看了我的代码的每个实例,这些实例将使用 .Skip 或 .Take 或两者,并且它们都有一个 OrderBy 子句。
我的问题是,有没有我可以设置的标志

DbContextOptiosnBuilder() .ConfigureWarnings(w => w.Throw(RelationalEventId.???))


帮助确定这些 .Skip 和 .Take 查询正在运行的位置,或者以任何方式触发带有此警告的堆栈跟踪以缩小原因。
或者,如何从控制台消除此警告?

最佳答案

事实上,即使您使用 FirstOrDefault 也会收到此警告。 (或 SingleOrDefault )在主键选择上,即

context.dbsetXXX.SingleOrDefaultAsync(xxx => xxx.ID == id);
这似乎是由于该查询在 T-SQL 中如何错误地映射 - 使用 TAKE(1)陈述。
所以现在我只会忽略警告(使用 .Ignore(CoreEventId.RowLimitingOperationWithoutOrderByWarning) ... )

关于c# - Entity Framework Core 5.0 警告限制运算符 ('Skip'/'Take' ) 没有 'OrderBy' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65311789/

相关文章:

c# - AutoMapper:为没有映射的嵌套属性设置引用

c# - 通过 WCF 发送大型 Xml 字符串的最有效解决方案?

c# - 静态检查器无法评估特定条件下的确定性行为?

c# - 使用 EF Core 2.0 时的单元测试

c# - 将 IdentityUserClaim 导航添加到 IdentityUser<int>

c# - 在 C# 中处理窗体上的控件时何时使用 THIS 关键字

c# - 如何将 HttpClientFactory 与 AutoRest 生成的客户端一起使用

c# - 自定义 AuthenticationHandler 在 Asp.Net Core 3 中不起作用

c# - EntityFramework核心(七)如何映射protected/private属性

c# - 试图找出模型和 DbContext : 'Employee' 的 EntityFramework 元数据