我先使用EF数据库。在我的数据库中,我有一个字段,我知道它总是10位数字,所以我自然选择了decimal(10,0)
类型,当我在表格中插入值时,我可以插入任何长达10位的数字,但是,当我插入一个带有EF6的实体时,它会添加一个0小数,然后抛出一个超出范围值的参数。我的C#代码中的字段类型为decimal
以下是调用context.SaveChanges()
之前的实体:
进行健全性检查,这是sql server中的列:
修改:
这是EF映射:
答案 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建议的那样。