Я впервые работаю с LINQ и хотел, чтобы Mapping работал, когда у меня есть денежный тип в SQL, но мое свойство объекта домена имеет тип double. Как я могу выразить это в файле XML или в коде, чтобы сопоставление не вызывало обычное исключение «неверное приведение»?
В XML-файле DBML вы можете установить для атрибута Expression элемента Column что-то вроде этого:
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
уверен, что деньги отображаются в System.Decimal
Немного не по теме, но это то, что каждый должен знать при работе с типом Money в SQLServer.
Вы не хотите использовать двойное число, вы хотите использовать десятичное число.
Двойной тип является длинным с плавающей точкой, и арифметика с плавающей запятой никогда не должна использоваться для финансовых расчетов.
Подумайте об этом, фракции 1/3, 1/3 и 1/3 равны 1. Однако, когда выражается как двойной, то есть:
.3333 + .3333 + .3333 = .9999 не 1.
Вы можете подумать, что потерять тысячную часть цента тривиально, но это не так, когда вы работаете с кем-то, тратя деньги.
Используйте System.Decimal.