为什么我的实体框架变成了“2.87”变成只是“2” (小数域)?

发布于 2024-10-30 14:35:39 字数 1010 浏览 1 评论 0原文

我验证了正确的值“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

I verfied that the correct value '2.87' is coming into the service.. and accord to the EF diagram the type for the 'Score' field is 'Decimal'... But in the database it says just '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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼睛会笑 2024-11-06 14:35:39

您需要在小数字段上设置比例。将“分数”字段更改为小数(18,2)

请参阅 MSDN 上的小数帮助文件< /a>

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

在此处输入图像描述

You need to set the scale on the decimal field. Change the Score field to be decimal(18,2)

See Decimal help File on MSDN

You can set the Scale in EF by first selecting the field, then in the properties window you will see a property for Scale (see image)

enter image description here

逆夏时光 2024-11-06 14:35:39

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

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

decimal(18,0) means a decimal number with 18 digits to the left of the decimal point, and 0 to the right.

Therefore, your value is being stored as 2. I suggest using decimal(18,2) or similar, which allows 18 digits, with up to 2 to the right of the decimal point.

自在安然 2024-11-06 14:35:39

将列数据类型更改为 金钱(而不是小数) 并重新生成您的 edmx。

Change your column datatype to Money (instead of decimal) and regen your edmx.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文