Jor*_*byn 3 c# entity-framework-core asp.net-core
我正在编写一个 .net Core 3.1 应用程序,最近将其更新为 Entity Framework Core 5.0。此后运行应用程序开始显示警告,如下所示:
该查询使用行限制运算符 ('Skip'/'Take') 而没有 'OrderBy' 运算符。这可能会导致不可预测的结果。
我已经查看了我的代码的每个实例,这些实例将使用 .Skip 或 .Take 或两者,并且它们都有一个 OrderBy 子句。
我的问题是,有没有我可以设置的标志
DbContextOptionsnBuilder() .ConfigureWarnings(w => w.Throw(RelationalEventId.???))
帮助确定这些 .Skip 和 .Take 查询正在运行的位置,或者以任何方式触发带有此警告的堆栈跟踪以缩小原因。
或者,如何从控制台消除此警告?
EventId您正在寻找的值为CoreEventId.RowLimitingOperationWithoutOrderByWarning.
查询使用没有 OrderBy 的行限制操作 (Skip/Take),这可能会导致不可预测的结果。
此事件位于DbLoggerCategory.Query类别中。
和往常一样,默认操作是Log,您可以将其转为错误
.Throw(CoreEventId.RowLimitingOperationWithoutOrderByWarning)
Run Code Online (Sandbox Code Playgroud)
或压制它
.Ignore(CoreEventId.RowLimitingOperationWithoutOrderByWarning)
Run Code Online (Sandbox Code Playgroud)
小智 5
事实上,即使您在主键选择上使用FirstOrDefault(或SingleOrDefault),您也会收到此警告,即
context.dbsetXXX.SingleOrDefaultAsync(xxx => xxx.ID == id);
Run Code Online (Sandbox Code Playgroud)
这似乎是由于此查询如何在 T-SQL 中错误地映射 - 使用TAKE(1)语句。所以现在我只会忽略警告(使用.Ignore(CoreEventId.RowLimitingOperationWithoutOrderByWarning) ...)
| 归档时间: |
|
| 查看次数: |
2387 次 |
| 最近记录: |