Mapeamento LINQ para SQL do Money para o Double
-
08-06-2019 - |
Pergunta
Estou trabalhando com LINQ pela primeira vez e queria que o Mapeamento funcionasse quando tenho um tipo de dinheiro no SQL, mas minha propriedade de objeto de domínio é do tipo double.Como posso expressar isso no arquivo XML ou em código para que o mapeamento não gere a exceção usual de "conversão inválida"?
Solução
No arquivo DBML XML, você pode definir o atributo Expression de um elemento Column como algo assim:
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
Outras dicas
Um pouco fora do assunto, mas isso é algo que todos deveriam saber ao trabalhar com o tipo Money no SQLServer.
Você não quer usar um duplo, você quer usar um decimal.
Um Double é um float longo e a aritmética de ponto flutuante nunca deve ser usada para cálculos financeiros.
Pense nisso, as frações 1/3, 1/3 e 1/3 são iguais a 1.No entanto, quando expresso como um duplo, ou seja:
0,3333 + 0,3333 + 0,3333 = 0,9999 e não 1.
Você pode pensar que perder um milésimo de centavo é trivial, mas não é quando você trabalha com o dinheiro de outra pessoa.
Use System.Decimal.
tenho certeza que o Money mapeia para System.Decimal