4

EF5 でバグを発見したと思いますが、これが既知の修正がある奇妙な動作ではないことを確認したいと思います (私が見る限り、Google または Bing には何もありません)。

10 進数 (18,2) のフィールドで 0.06 のデータベース値を選択しています。EF が生成すると予想していたクエリを実行し、.06 を取得しました。また、ef が実行した SQL プロファイラー クエリを取得し、.06 を取得しました。ただし、私のコードでは、.0675 を取得しました。EDMX フィールドを確認したところ、一致する精度/スケールは 18,2 です。

私のデータは「4 セットの 1 バージョン」であるため、クエリはバージョン番号に対して where 句を実行し、4 行を取得しますが、行 3 のみが奇妙な値を取得します。行 1、2、および 4 は .03、.04、および .12 であり、そのまま返されますが、行 3 は .06 ですが、.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 の場合、値は同じであるため、プロキシ経由でクエリを実行しても値は変更されません。その場合、視点の問題ほどバグではありません。データベースにとっては .06 ですが、アプリにとっては依然として .0675 であり、どちらも正当です。

于 2013-09-19T18:47:51.327 に答える