Значение параметра вне диапазона - PullRequest
0 голосов
/ 28 мая 2019

Кажется, EF дополняет нули до значения, которое я пытаюсь сохранить, а затем выдает исключение. Вот мой код: почему поле общего количества часов со значением 10,17 выходит за пределы диапазона десятичного (6,5) типа значения и почему оно заполняет это значение нулями? Сохранение этого значения напрямую с помощью SQL Server Management Studio не является проблемой, поэтому это скорее похоже на проблему с EF.

Это файл базы данных .edmx. Я попытался установить масштаб и точность и установить на ноль. Ни один не работал

 var rVal = new Data.FactPayrollHour()
                {
                    BereavementHours = 0.0M,
                    CostCenter = "MyCostCenter",
                    Department = "MyDepartment",
                    EmergencyHours = 0.0M,
                    HomeGroupCode = "MyHomeGroup",
                    PayrollEmployeeId = employees.FirstOrDefault().Id,
                    PayType = "MyPayType",
                    PunchDateKey = dateDims.FirstOrDefault().ID,
                    Schedule = "",
                    ServiceHours = 0.0M,
                    Shift = "",
                    ShortTermHours = 0.0M,
                    TimePolicy = "",
                    TotalHours = 10.17M,
                    UnpaidHours = 0.0M,
                    VacationHours = 0.0M
                };
                db.FactPayrollHours.Add(rVal);
                db.SaveChanges();

Сообщение об исключении: Parameter value '10.17000' is out of range.

Трассировка стека:

   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, _SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Boolean sync, TaskCompletionSource`1 completion, Int32 startRpc, Int32 startParam)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c)
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
   at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues, List`1 generatedValues)
   at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()

1 Ответ

1 голос
/ 28 мая 2019

Если тип данных - decimal(6,5), вы можете использовать до 6 общего количества десятичных цифр, которые будут сохранены, из которых 5 будут зарезервированы после десятичной точки (поэтому у вас есть дополнительные 0-е после десятичной точки).

Это оставляет 1 цифру перед (слева) десятичной запятой.И вы используете 2. Вот почему у вас есть ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...