4

我想我在 EF5 中发现了一个错误,但我想验证这不是一些奇怪的行为,有一个已知的修复方法(据我所知,Google 或 Bing 上没有)。

我正在对十进制(18,2)字段中的0.06数据库值进行选择。我运行了我希望 EF 生成的查询并得到了 .06,我使用了 ef 运行的 sql profiler 查询也得到了 .06。然而,在我的代码中,我得到了 0.0675。我检查了 EDMX 字段,它的匹配精度/比例为 18,2。

我的数据是“带有 4 个集合的 1 个版本”,因此我的查询对版本号执行 where 子句,然后返回 4 行,但只有第 3 行获得了奇怪的值。第 1、2 和 4 行是 0.03、0.04 和 0.12,它们按原样返回,但第 3 行是 0.06,但返回为 0.0675。

最后可能有用的是 EF 代理是唯一错误的部分。如果我选择 EF 代理,即会弹出此消息,但如果我在视图模型中进行选择,则会返回正确的值。

_entities.Sets.Where(x => x.VersionID == versionID) // ---> returns bad value
_entities.Sets.Where(x => x.VersionID == versionID).Select(x => new VM { Rate = x.Rate}) // ---> returns correctly

关于这种行为的任何想法?

编辑:似乎我什至不需要一个模型来选择,甚至只选择我想要返回的字段,所以我想我要向微软提交一个错误:

_entities.Sets.Where(x => x.VersionID == versionID).Select(x => x.Rate)  // ---> returns .06 correctly
4

1 回答 1

2

我猜代理对象之前加载的值为 .0675。因此,除非您明确重新加载,否则在通过代理查询时它不会更改值,因为在精度为 2 的情况下,该值将是相同的。如果是这种情况,那么从角度来看,它并不是一个错误。对于数据库,它是 0.06,对于应用程序,它仍然是 0.0675,两者都是合法的。

于 2013-09-19T18:47:51.327 回答