实体框架将小数位附加到十进制类型的字段(10,0)

时间:2014-07-27 10:46:40

标签: c# sql entity-framework entity-framework-6

我先使用EF数据库。在我的数据库中,我有一个字段,我知道它总是10位数字,所以我自然选择了decimal(10,0)类型,当我在表格中插入值时,我可以插入任何长达10位的数字,但是,当我插入一个带有EF6的实体时,它会添加一个0小数,然后抛出一个超出范围值的参数。我的C#代码中的字段类型为decimal

enter image description here

以下是调用context.SaveChanges()之前的实体:

enter image description here

进行健全性检查,这是sql server中的列: enter image description here

修改

这是EF映射:

enter image description here

Just reported it on codeplex

2 个答案:

答案 0 :(得分:3)

错误听起来像EF中的错误,但如果它总是一个整数,那么使用int而不是十进制会更有意义吗?我在考虑逻辑和性能。

答案 1 :(得分:0)

这实际上是SqlClient中的一个错误 - SqlDecimal代码无法正确处理某些边缘情况的精度。

我相信罪魁祸首在这里: http://referencesource.microsoft.com/#System.Data/data/System/Data/SQLTypes/SQLDecimal.cs#416

然而,鉴于这种行为已经很长时间了,所以它不太可能被修复。我建议使用bigint解决这个问题,比如user1648371和Andrew Morton建议的那样。