为什么我的实体框架将'2.87'变成'2'(十进制字段)?

pun*_*ter 5 sql t-sql precision entity-framework decimal

我确认正确的值'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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 18

您需要在十进制字段上设置比例.将分数字段更改为十进制(18,2)

请参阅MSDN上的十进制帮助文件

您可以通过首先选择字段来设置EF中的比例,然后在属性窗口中,您将看到Scale的属性(参见图像)

在此输入图像描述


RB.*_*RB. 7

decimal(18,0)表示小数点左边18位的十进制数,右边是0.

因此,您的值将被存储为2.我建议使用decimal(18,2)或类似,允许18位数,小数点右边最多2.