实体框架错误,额外小数位

时间:2013-09-19 15:25:28

标签: c# sql entity-framework

我认为我在EF5中发现了一个错误,但我想验证这不是一些奇怪的行为,有一个已知的修复程序(就我所见,Google或Bing上没有任何内容)。

我正在对十进制字段(18,2)中的数据库值进行选择,该值为0.06。我运行查询,我期望EF生成并得到.06回来,我拿了sql profiler查询,如果运行了也得到.06回来了。然而,在我的代码中,我得到了.0675。我检查了EDMX字段,其匹配精度/比例为18,2。

我的数据是“1个版本,共有4套”,所以我的查询在版本号上执行了where子句,然后返回4行,但只有第3行获得了奇怪的值。第1,2和4行是.03,.04和.12,它们返回,但第3行是.06,但返回为.0675。

最后可能有用的是EF代理是唯一错误的部分。如果我选择EF代理,那就是弹出的时候,但如果我选择进入我的viewmodel,则会返回正确的值。

_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

1 个答案:

答案 0 :(得分:2)

我猜测代理对象之前加载的值为.0675。因此,除非您明确重新加载,否则在通过代理查询时不会更改该值,因为如果精度为2,则值将相同。如果是这样,那么它不是错误和透视问题一样多。对于数据库它的.06,对于应用程序,它仍然是.0675,两者都是合法的。