2013-07-22 4 views
2

Я использовал видео http://msdn.microsoft.com/en-us/data/jj200620, чтобы узнать, как создать консольное приложение C#, которое обращается к старой базе данных SQL Server.десятичный? в Entity Framework

У меня есть некоторые из полей в базе данных, установленных как Money. Структура сущности создала модель из существующей базы данных и создала свойство с типом decimal?. Это делает интересным работать с ним в C#, поскольку функция становится:

private static string WriteMoney(decimal? item, string output) 

, который работает нормально.

Я ничего не могу найти в Интернете по адресу decimal?. Очевидно, Money - это decimal, и я мог бы исправить проблему, изменив типы баз данных SQL. Это не вызывает хлопот, просто интересное наблюдение.

Кто-нибудь сталкивался с этим раньше?

+1

Что такое объявление столбца в SQL? Я готов поспорить, что он допускает нулевые значения. – gunr2171

ответ

2

SQL MONEY является decimalтип тип с четырьмя знаками после запятой.
Это функционально похож на SQL DECIMAL(19,4)

Однако, не рекомендуется использовать MONEY тип, если вы будете делать любые нескалярный arithmatic, а вы должны использовать соответствующий DECIMAL тип:

Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server?

Это важная дифференциация от double или float, которые являются базовыми 2-блоками

Как допустимости пустого, все Типы SQL могут быть обнуляемыми, если они установлены таким образом в схеме. Если вы не хотите, чтобы EF использовал тип с нулевым значением, вам нужно сделать поле SQL неэлементным и обновить свой dbml.

+0

Я думаю, что более важной частью вопроса является нечетность десятичной дроби. – gunr2171

+0

@ gunr2171 любой тип SQL может быть NULL, если он установлен соответствующим образом в схеме ... – Matthew

1

decimal? это просто синтаксический сахар для Nullable<decimal>

Вы можете прочитать на Nullable, если вы не знаете об этом уже.

C# не имеет типа «денег», как это делает SQL, поэтому EF должен получить следующую ближайшую вещь, которая равна decimal. decimal - всего лишь ключевое слово C# для System.Decimal.

Я предполагаю, что ваш столбец типа money в SQL допускает ошибки. Вот почему это decimal?, а не просто decimal, так как System.Decimal - это структура и не может быть нулевой.