实体框架核心 5.0 警告限制运算符("跳过"/"获取"),没有'OrderBy'运算符



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

查询使用不带"OrderBy"运算符。这可能会导致不可预测的结果。

我已经查看了我的代码中使用.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) ...(

您要查找的EventId值是CoreEventId.RowLimitingOperationWithoutOrderByWarning

查询在没有OrderBy的情况下使用行限制操作(Skip/Take(,这可能会导致不可预测的结果。

此事件属于DbLoggerCategory.Query类别。

像往常一样,默认操作是Log,您可以将其转换为错误

.Throw(CoreEventId.RowLimitingOperationWithoutOrderByWarning)

或抑制

.Ignore(CoreEventId.RowLimitingOperationWithoutOrderByWarning)

请记住,OrderBy/OrderByDescending方法应该在Skip/Take之前调用,这样结果就不会被分页

最新更新