views:

578

answers:

5

I'm working with LINQ for the first time and wanted to get the Mapping to work when I have a money type in SQL, but my domain object property is of type double. How can I express this in the XML file, or in code so that the mapping does not throw the usual "invalid cast" exception?

A: 

pretty sure Money maps to System.Decimal

Check here

KiwiBastard
A: 

Correct! This now works, but what about something like smallint to integer?

+1  A: 

In the DBML XML file, you can set the Expression attribute of a Column element to something like this:

 <Column Name="Table1.Amount" DbType="smallint" Type="System.Int32" 
         Expression="CAST(Table1.Amount as int)" />
Mark Cidade
A: 

Excellent! Thanks again for the help!

+1  A: 

Slightly off topic, but this is something everyone should know when working with the Money type in SQLServer.

You don't want to use a double, you want to use a decimal.

A Double is a long float, and floating point arithmetic should never be used for financial calculations.

Think of this, the fractions 1/3, 1/3 and 1/3 equal 1. However, when expressed as a double ie:

.3333 + .3333 + .3333 = .9999 not 1.

You may think that losing a thousandth of a cent is trivial, but its not when your working with someone elses money.

Use System.Decimal.

FlySwat