没有“OrderBy”运算符的实体框架核心5.0警告限制运算符(“跳过”/“接受”)

c#

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

该查询使用行限制运算符 ('Skip'/'Take') 而没有 'OrderBy' 运算符。这可能会导致不可预测的结果。

我已经查看了我的代码的每个实例,这些实例将使用 .Skip 或 .Take 或两者,并且它们都有一个 OrderBy 子句。

我的问题是,有没有我可以设置的标志

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

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

或者,如何从控制台消除此警告?

回答

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

context.dbsetXXX.SingleOrDefaultAsync(xxx => xxx.ID == id);

这似乎是由于此查询如何在 T-SQL 中错误地映射 - 使用TAKE(1)语句。所以现在我只会忽略警告(使用.Ignore(CoreEventId.RowLimitingOperationWithoutOrderByWarning) ...


以上是没有“OrderBy”运算符的实体框架核心5.0警告限制运算符(“跳过”/“接受”)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>