我有一个包含Decimal公共属性的类(由Entity Framework生成,代码显示在下方),并存在将其四舍五入为整数的问题。
我正在阅读一个文本文件,并按如下方式解析数字(为清晰起见,省略了大多数代码)...
decimal val = decimal.Parse(str);
Transaction t = new Transaction {
Value = val
};
如果我检查val,我可以看到它包含完整的值,例如9.99,并且如果我检查Value属性,那是正确的。但是,将对象保存到数据库时,该值将四舍五入到最接近的整数,从而丢失小数部分。
数据库具有定义为十进制(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
是scale
。引用文档:
scale
:将存储在小数点右边的小数位数。
换句话说,您的数据库列只能保存整数。我怀疑您想要类似的东西decimal(28,10)
(取决于您的价值观)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句