我想我在 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