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"?

Foi útil?

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

Verifique aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top