#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