【发布时间】:2019-04-08 15:15:12
【问题描述】:
我在 Entity Framework Core 2.1 中遇到了查询生成问题。
我有一个问题
var q = KostenSchweissen.Where(k => k.Grenze >= ewd)
.OrderBy(k => k.Grenze)
.FirstOrDefault();
KostenSchweissen.Grenze 是整数,而 ewd 是浮点数。
所以这会查找第一行的“Grenze”大于或等于传递的值。 这之前运行良好(EF Core 1.x,不确定 2.0),但现在它正在生成查询(来自 SQL Server Profiler):
exec sp_executesql N'SELECT TOP(1) [k].[ID], [k].[Grenze], [k].[PreisEdelstahl], [k].[PreisNormalstahl]
FROM [KostenSchweissen] AS [k]
WHERE [k].[Grenze] >= @__ewd_0
ORDER BY [k].[Grenze]',N'@__ewd_0 smallint',@__ewd_0=17
ewd 是 17.1。所以这完全忽略了 ewd 是一个浮点数,显然返回了错误的成本。在查询中转换为双精度或浮点数不起作用,我能想到的唯一解决方法是
var q = KostenSchweissen.Where(k => k.Grenze * 1.0 >= ewd)
.OrderBy(k => k.Grenze)
.FirstOrDefault();
这显然不好,因为它涉及数据库端计算。在我的情况下,查询对性能并不重要,但我仍然想知道:这是一个错误,还是被认为是一个功能?如果是这样,为什么?这至少不是应该在某处宣布的重大变化吗?还是我瞎了才发现?
我试图在 EF 文档中找到任何提示 - 发行说明、重大更改、论坛...但找不到任何东西。
对于相关文档、最佳实践或任何其他可能有助于解决此问题的任何提示,我将不胜感激。
编辑:EF 核心团队已将其视为将在 3.0.0 (https://github.com/aspnet/EntityFrameworkCore/issues/13908) 中修复的错误。好的! 与此同时,有没有人知道我可以做些什么作为解决方法?我是否必须手动查找所有可能发生这种情况的查询?
【问题讨论】:
标签: entity-framework-core ef-core-2.0 ef-core-2.1 entity-framework-core-2.1