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

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

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

编辑:
出现我甚至不需要选择模型,甚至只选择我想要的字段正确返回所以我想我将向Microsoft提交一个错误:

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

最佳答案 我猜测代理对象之前加载的值为.0675.所以,除非你明确地重新加载,否则在通过代理查询时它不会改变值,因为在给定2的精度的情况下,值将是相同的.如果是这样的话那么它就不像透视问题那么多.对于数据库它是.06,对于应用程序它仍然是.0675,两者都是合法的.

点赞