Почему моя Entity Framework превращает ‘2.87’ просто в ‘2’ (десятичное поле)?

#sql #tsql #entity-framework #decimal #precision

#sql #tsql #entity-framework #десятичное #точность

Вопрос:

Я проверил, что правильное значение ‘2.87’ поступает в службу.. и в соответствии с диаграммой EF тип поля ‘Score’ — ‘Decimal’… Но в базе данных указано только ‘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
  

Ответ №1:

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

Смотрите файл справки Decimal на MSDN

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

введите описание изображения здесь

Комментарии:

1. Есть способ, которым я могу установить это в Entity Designer?

2. @punkouter Я отредактировал свою публикацию с изображением, где вы можете установить масштаб в Entity Framework

3. Я обнаружил это ранее.. и он сказал «нет», и я нажал на него и ничего не увидел.. затем я попробовал (18,2), и это не сработало .. но хорошо .. теперь я понял. Спасибо.

Ответ №2:

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

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

Комментарии:

1. Хорошо, спасибо. Хотя, если я каким-то образом не смогу установить это в entity designer, мне придется вручную изменять созданный sql .. это боль.

Ответ №3:

Измените тип данных вашего столбца на Money (вместо decimal) и восстановите свой edmx.

Комментарии:

1. -1: такого типа не существует, по крайней мере, в C #. И если вы имели в виду VisualBasic, пожалуйста, обратите внимание, что это десятичное число Money == C #.

2. Я думаю, @misskitty говорит о sql money