2

我有一个定义为十进制(9,9)的数据库字段。C# 中的 edmx 模型将此字段映射到精度和小数位数为 9 的十进制变量。

我将数字 5 放入变量中。我可以检查的所有地方都将值显示为 5(在局部变量、实体类实例、数据上下文等中)。

此时的DataContex.SaveChanges()值被转换为“5.000000000”。尽我所能告诉实体框架在尝试保存到数据库之前将值添加 9 个小数位。这会导致错误,因为该值现在有太多数字。

有谁知道是什么导致了这种行为以及如何改变它?

附加信息- 我首先在 Microsoft SQL 2008 R2 中创建我的数据库。然后我从数据库中生成了实体框架模型。

4

2 回答 2

2

如果您确实已经decimal(9,9)在数据库中定义了数据类型,那么您就有问题了。
根据微软的说法,第一个数字是总位数,第二个数字是小数点右边的位数。
所以你真的只能在这样的字段中存储低于 1 的数字,格式为.123456789. 如果需要存储 5,则需要不同的格式。

于 2012-04-16T18:24:11.423 回答
1

这不是实体框架特有的,而是精度定义为 9 的小数(映射回您的数据库)。因此,当您输入 5 时,由于数据的定义方式,小数点后将添加 0。

这是在 .NET 1.1 中实施的,以符合标准(我忘记是哪个标准了)。出于显示目的,您始终可以使用 Math.Round 来删除一定程度的精度(或根据您的实际需要以不同的方式定义数据)。

于 2012-04-16T17:01:02.553 回答