C#实体框架-十进制错误

本文关键字:十进制 错误 框架 实体 | 更新日期: 2023-09-27 18:28:19

尝试执行此代码:

process.POPManagerPreparation.JudgementPercentage = (decimal?)txtAlternativePercentage.Value;

这很好,但当执行代码Context.Current.SaveChanges();将其保存在数据库中时,会出现以下ArgumentException:

An error occurred while updating the entries. See the inner exception for details.
System.ArgumentException: Parameter value '3,0000' is out of range.

这肯定是关于我添加的字段,我知道是因为它的价值。(当我用其他输入进行检查时,它会发生变化)

我试图将我的计算机设置从NL NL更改为US en,因为感觉有问题,但没有解决,同样的错误仍然存在。

还在文本字段上尝试了一些东西,同样的错误仍然存在:

    <telerik:RadNumericTextBox MinValue="0" MaxLength="100" ID="txtAlternativePercentage"
     runat="server" Type="Percent" Culture="en-US" Width="80px" LabelCssClass=""
     Label="Verhogingspercentage:" LabelWidth="130" AutoPostBack="true"
     OnTextChanged="SalaryChanged" Visible="false">
             <NumberFormat DecimalDigits="1" />
             <IncrementSettings InterceptArrowKeys="False" InterceptMouseWheel="False" />
    </telerik:RadNumericTextBox>

完整地说,数据库字段是:decimal(10, 5),所以这似乎也没问题。在网上发现了很多关于使用太小字段的人的问题,但没有关于我的问题。

C#实体框架-十进制错误

您可以在modelBuilder:中指定属性的精度

modelBuilder.Entity<POPManagerPreparation>()
            .Property(e => e.JudgementPercentage)
            .HasPrecision(10,5);

我像Pankaj Gupta建议的那样,通过更改为浮点字段来解决这个问题。这很好用。

所以我已经学会了不要使用十进制,除非你确信这个值严格按照它所期望的十进制形式。