Почему моя Entity Framework превращает «2,87» в просто «2» (десятичное поле)? - PullRequest
5 голосов
/ 05 апреля 2011

Я подтвердил, что в сервис поступает правильное значение «2,87» и, согласно диаграмме EF, тип поля «Оценка» - «Десятичный» ... Но в базе данных написано просто «2»

   [OperationContract]
        public void AddHighScore(string strName, decimal dScore, int iLevel)
        {
            using (SQL2008R2_789485_punkouterEntities1 dc = new SQL2008R2_789485_punkouterEntities1())
            {
                HighScore oHighScore = new HighScore();
                oHighScore.Level = iLevel;
                oHighScore.Name = strName;
                //oHighScore.Name = dScore.ToString();
                oHighScore.Score = dScore;
                dc.AddToHighScores(oHighScore);
                dc.SaveChanges();
            }
        }


-- --------------------------------------------------
-- Creating all tables
-- --------------------------------------------------

-- Creating table 'HighScores'
CREATE TABLE [dbo].[HighScores] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
    [Score] decimal(18,0)  NOT NULL,
    [Level] int  NOT NULL
);
GO

Ответы [ 3 ]

18 голосов
/ 05 апреля 2011

Вам необходимо установить масштаб в десятичном поле.Измените поле Score на десятичное (18,2)

См. Справочный файл по десятичным значениям в MSDN

Вы можете установить шкалу в EF, сначала выбрав поле, затемв окне свойств вы увидите свойство для Scale (см. изображение)

enter image description here

7 голосов
/ 05 апреля 2011

decimal(18,0) означает десятичное число с 18 цифрами слева от десятичной точки и 0 справа.

Следовательно, ваше значение сохраняется как 2.Я предлагаю использовать decimal(18,2) или аналогичный, который допускает 18 цифр, до 2 справа от десятичной точки.

0 голосов
/ 14 сентября 2011

Измените тип данных столбца на Деньги (вместо десятичных) и восстановите ваш edmx.

...