Money から Double への LINQ から SQL へのマッピング
-
08-06-2019 - |
質問
初めて LINQ を使用しており、SQL に通貨型がある場合にマッピングを機能させたいと考えていますが、ドメイン オブジェクト プロパティの型は double です。マッピングで通常の「無効なキャスト」例外がスローされないように、これを XML ファイルまたはコードでどのように表現すればよいでしょうか?
解決
DBML XML ファイルでは、Column 要素の Expression 属性を次のように設定できます。
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
他のヒント
少し話が逸れましたが、これは SQLServer で Money 型を扱うときに誰もが知っておくべきことです。
double を使用するのではなく、10 進数を使用したいのです。
Double は Long float であるため、浮動小数点演算は金融計算には決して使用しないでください。
これを考えてください。分数 1/3、1/3、1/3 は 1 に等しいと考えてください。ただし、double ie で表現すると次のようになります。
.3333 + .3333 + .3333 = .9999 は 1 ではありません。
1000分の1セントを失うのは些細なことだと思うかもしれませんが、他人のお金を使って仕事をしている場合はそうではありません。
System.Decimal を使用します。
Money が System.Decimal にマップされることは間違いありません
所属していません StackOverflow