我正在编写一个 .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/