C# 参数值超出范围

C# 参数值超出范围,c#,entity-framework-6,C#,Entity Framework 6,EF似乎在对我试图保存的值填充零,然后抛出异常。下面是我的代码:为什么值为10.17的total hours字段超出了十进制(6,5)值类型的范围,为什么用零填充该值?直接使用SQLServerManagementStudio保存此值似乎不是问题,因此更像是EF的问题 这是来自数据库的第一个.edmx文件。我试过将刻度和精度设置为“无”。两者都不起作用 var rVal = new Data.FactPayrollHour() {

EF似乎在对我试图保存的值填充零,然后抛出异常。下面是我的代码:为什么值为10.17的total hours字段超出了十进制(6,5)值类型的范围,为什么用零填充该值?直接使用SQLServerManagementStudio保存此值似乎不是问题,因此更像是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();
异常消息是:
参数值“10.17000”超出范围。

堆栈跟踪:

   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()
at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd,_SqlRPC[]rpcArray,Int32超时,Boolean inSchema,SqlNotificationRequest notificationRequest,TdsParserStateObject stateObj,Boolean isCommandProc,Boolean sync,TaskCompletionSource`1 completion,Int32 startRpc,Int32 startpram)
位于System.Data.SqlClient.SqlCommand.RunExecuteReaderDS(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、Boolean async、Int32超时、任务和任务、Boolean asyncWrite、Boolean inRetry、SqlDataReader ds、Boolean describeParameterEncryptionRequest)
位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、String方法、TaskCompletionSource`1完成、Int32超时、任务和任务、Boolean和usedCache、Boolean asyncWrite、Boolean inRetry)
位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、String方法)
位于System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior,String方法)
位于System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior)
位于System.Data.Common.DbCommand.ExecuteReader(CommandBehavior)
在System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b_uÈc(DbCommand t,DbCommandInterceptionContext`1c)
在System.Data.Entity.Infrastructure.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget目标,Func`3操作,TInterceptionContext拦截Context,操作`3执行,操作`3执行)
位于System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand命令,DbCommandInterceptionContext interceptionContext)
位于System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior)
位于System.Data.Common.DbCommand.ExecuteReader(CommandBehavior)
在System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues,List`1 generatedValues)
位于System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()处

如果数据类型为
十进制(6,5)
您最多可以使用6个要存储的十进制数字总数,其中5个将保留在小数点后(这就是为什么您在小数点后有额外的0-E)

这样,在小数点之前(左边)就有一个数字了。你用的是2。
这就是产生错误的原因。

十进制(6,5)
表示:要存储的十进制数字总数为6,其中5位位于小数点右侧。如果类型为十进制(6,5),则SSMS不可能在其中存储10.17。你确定你总是在同一个数据库中吗?显示器
10.17000
与小数点的比例一致,只是为了显示。是的,就是这样。我对精度属性有一个误解。我以为是左边的数字,而不是总数字。现在清楚了。非常感谢。