2011-04-05 18 views
5

Doğru olarak '2.87' değerinin servise geldiğini ve EF diyagramına göre 'Puan' alanının türü 'Ondalık' olduğunu kabul ettim ... Ama veritabanında sadece '2' yazıyorVarlık Çerçevem ​​neden '2.87' değerini '2' (ondalık alan) haline getiriyor?

Ölçeklendirmeyi ondalık alana ayarlamanız gerekir.
[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 

cevap

18

(18,2)

See Decimal help File on MSDN

Önce alanını seçerek EF Ölçeği ayarlayabilirsiniz ondalık olmak Skor alanını değiştirin, ardından özellikleri penceresinde sen Ölçeği için bir mülk (resme bakın) göreceksiniz

enter image description here

+0

Bunu Entity Designer'da ayarlayabileceğim bir yöntem var mı? – punkouter

+1

@punkouter İntibak Çerçevesinde – Mark

+0

Ölçeğini ayarlayabildiğiniz bir resim ile yayınımı düzenledim. Daha önce bunu buldum .. ve hiçbirini tıklayıp üzerine tıkladım ve hiçbir şey görmedim .. sonra denedim (18,2) ve işe yaramadı .. ama tamam .. şimdi anladım. Teşekkürler. – punkouter

7

decimal(18,0) 18 ondalık noktasının solundaki hane ve sağa bir ondalık sayısı anlamına gelir. Bu nedenle, değeriniz 2 olarak depolanmaktadır. On sekizlik noktaya izin veren decimal(18,2) ya da benzerlerini kullanmanızı öneririm, ondalık noktanın sağında 2'ye kadar.

+0

Tamam teşekkürler. Her ne kadar bunu bir şekilde tasarımcının tasarımcısı olarak ayarlayamasam da, o zaman bir kez yaratılan SQL'i elle değiştirmek zorundayım. – punkouter

-1

Sütun veri türünü Money (instead of decimal) olarak değiştirin ve edmx'inizi değiştirin.

+0

-1: En azından C# cinsinden böyle bir tür yoktur. Ve eğer VisualBasic'i kastediyorsanız, lütfen bunun Money == C# 'un ondalık olduğunu unutmayın. – quetzalcoatl