为什么我的C#十进制值被舍入为整数

为什么我的C#十进制值被舍入为整数,c#,entity-framework,decimal,rounding,C#,Entity Framework,Decimal,Rounding,我有一个包含Decimal公共属性的类(由Entity Framework生成,代码显示在下方),但在将其舍入为整数时遇到了问题 我正在阅读一个文本文件,并按如下方式解析这些数字(为了清晰起见,大多数代码都省略了) 如果我检查val,我可以看到它包含完整的值,例如9.99,如果我检查value属性,它是正确的。但是,当对象保存到数据库时,该值将舍入到最接近的整数,从而丢失小数部分 数据库将字段定义为decimal(18,0),EF在此字段上拾取并使用decimal类型作为属性 以下是EF为属性生

我有一个包含Decimal公共属性的类(由Entity Framework生成,代码显示在下方),但在将其舍入为整数时遇到了问题

我正在阅读一个文本文件,并按如下方式解析这些数字(为了清晰起见,大多数代码都省略了)

如果我检查val,我可以看到它包含完整的值,例如9.99,如果我检查value属性,它是正确的。但是,当对象保存到数据库时,该值将舍入到最接近的整数,从而丢失小数部分

数据库将字段定义为decimal(18,0),EF在此字段上拾取并使用decimal类型作为属性

以下是EF为属性生成的代码

    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Decimal Value
    {
        get
        {
            return _Value;
        }
        set
        {
            OnValueChanging(value);
            ReportPropertyChanging("Value");
            _Value = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("Value");
            OnValueChanged();
        }
    }
    private global::System.Decimal _Value;
    partial void OnValueChanging(global::System.Decimal value);
    partial void OnValueChanged();
有人知道怎么回事吗

数据库的字段定义为十进制(18,0)

那就是问题所在。
0
这是
刻度。引述:

比例
:将存储在小数点右侧的小数位数


换句话说,数据库列只能包含整数。我猜想您需要类似于
decimal(28,10)
(取决于您的值)。

decimal(18,0)表示没有小数点,不是吗?表示左侧有18个位置,因为右侧没有。您可能需要十进制(18,2)。小数点左边16,右边2。谢谢,在创建表格时错过了这一点!Grr,我愚蠢的错误!我在设置数据库表时没有注意到这一点!谢谢
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Decimal Value
    {
        get
        {
            return _Value;
        }
        set
        {
            OnValueChanging(value);
            ReportPropertyChanging("Value");
            _Value = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("Value");
            OnValueChanged();
        }
    }
    private global::System.Decimal _Value;
    partial void OnValueChanging(global::System.Decimal value);
    partial void OnValueChanged();