2012-04-16 8 views
2

データベースフィールドは10進数(9,9)として定義されています。 C#のedmxモデルは、このフィールドを精度と位取りが9の10進変数にマップします。余分な小数点以下の桁の追加を省く

変数に5を入れます。私が確認できるところでは、値を5(ローカル変数、エンティティクラスインスタンス、データコンテキストなど)として表示します。

DataContex.SaveChanges()の時点で、値は "5.000000000"に変換されます。データベースに保存する前に、エンティティフレームワークが値に小数点以下9桁を追加していることが分かります。値の桁数が多すぎるため、エラーが発生します。

誰もがこの動作の原因とその変更方法を知っていますか?

追加情報 - 私はMicrosoft SQL 2008 R2でデータベースを作成し始めました。その後、データベースからEntity Frameworkモデルを生成しました。

+0

5を文字列として保存しますか?または小数として?またはint? – abatishchev

+0

プログラムでは、値5.0を入力しました。変数を調べると、Visual Studioで5の「小数」値が表示されます。 –

+0

@abatishchev数値リテラルについて言えば、5.0は倍ですが、5.0mは小数です。 – phoog

答えて

2

データベースに実際にデータタイプがdecimal(9,9)と定義されている場合は、問題があります。
Microsoftによれば、最初の数字は桁数の合計であり、2番目の数字は小数点以下の桁数です。
実際には、.123456789の形式で、そのようなフィールドに1未満の数値を格納することができます。 5を保存する必要がある場合は、別の形式が必要です。

+0

参照ページには値が「最大値」として記載されており、必要な値ではなく、可能な限度として読みます。私はそれを「10進数(9,4)」に変更し、すべてが機能しました。私はあなたの返信をasnwerとしてマークしています。ありがとうございました。 –

+0

はい、そのように読むとリファレンスページはあいまいですが、SQLでは小数点は実際には固定小数点型です(より柔軟なC#の小数点ではなく)。 –

1

これはEntity Frameworkにはあまり意味がありませんが、正確に定義された精度が10(データベースにマップされます)の小数点が必要です。したがって、5を入力すると、データが定義される方法のために、小数点の後に0が追加されます。

これは、.NET 1.1では標準に準拠するために配置されました(どちらが忘れているか)。表示の目的で、Math.Roundを使用して精度のレベルを削除することができます(または実際に必要なデータを異なるように定義することもできます)。

+0

精度レベルはC#で既に丸められています。保存時に余分な数字(小数点の右側)が追加されます。値が5(小数点または余分な数字なし)として表示されるため、C#で削除できるものは何もありません。 –

+0

@JeremyLund - このリンクの情報で精度を上書きすることができます:http://stackoverflow.com/questions/3504660/entity-framework-code-first-decimal-precision私はこの特定の状況に遭遇したことがないので、あなたのコメントに対する答えは直接わかりません。 – JasCav

+0

提案していただきありがとうございますが、私はModel Firstを使用しています。モデルには、データベースと一致する精度と位取り(9,9)の正しいプロパティが既に含まれています。だから、私はそれがこの定義された精度とスケールを超えているというように邪悪なのです。 –

関連する問題