2011-04-05 36 views
5

我确信正确的值'2.87'进入服务..并且符合EF图的'Score'字段的类型是'Decimal'...但是在数据库中它只是说'2'为什么我的实体框架将'2.87'变成'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 

回答

18

您需要在小数点字段上设置比例。改变的得分字段设置为十进制(18,2)

See Decimal help File on MSDN

您可以先选择字段设置规模,EF,然后在属性窗口中,您将看到量表(见图片)属性

enter image description here

+0

有一种方法可以在实体设计器中设置? – punkouter 2011-04-05 13:25:34

+1

@punkouter我编辑我的张贴与图像,您可以设置在实体框架中的比例 – Mark 2011-04-05 13:38:51

+0

我发现早些时候..它说没有,我点击它,什么也没看见..然后我试过(18,2),那没有工作..但确定..我现在得到它。谢谢。 – punkouter 2011-04-05 18:15:40

7

decimal(18,0)是指具有18个数字在小数点的左边和向右的十进制数。

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

+0

好的谢谢。虽然如果我不能在实体设计器以某种方式设置此,那么我必须手动更改genreated sql ..这是一个痛苦。 – punkouter 2011-04-05 13:26:09

-1

将您的列数据类型更改为Money (instead of decimal)并重新生成您的edmx。

+0

-1:至少在C#中没有这种类型。如果你的意思是VisualBasic,请注意它是Money == C#的小数。 – quetzalcoatl 2012-04-29 21:11:17

相关问题