更改十进制默认精度实体框架

Posted

技术标签:

【中文标题】更改十进制默认精度实体框架【英文标题】:Changing decimal default precision entity framework 【发布时间】:2013-06-02 10:02:29 【问题描述】:

我正在开发一个 MVC 4 架构 .net 项目。十进制参数的默认精度为 (18,2)。我做了一些迁移更改并将其更改为 (18,6)。所以现在数据库在小数点后存储 6 位数的刻度范围。但问题是它没有存储有问题的值。它只选择 2 位数字,然后将 0000 附加到 6 位。

例如:如果用户发送 45.233222,则存储在数据库中的值为 45.230000。 手动输入数据库工作得很好。 我是新手,正在研究这些东西......所以请建议如何更改十进制参数的默认精度,以便它在数据库中以六位精度存储。

我所做的迁移更改。

public override void Up()
        
            AlterColumn("dbo.TItems", "SubTotal", c => c.Decimal(nullable: false, precision: 18, scale: 6));
            AlterColumn("dbo.TItems", "UnitPrice", c => c.Decimal(nullable: false, precision: 18, scale: 6));
        

public override void Down()
        
            AlterColumn("dbo.TItems", "SubTotal", c => c.Decimal(nullable: false, precision: 18, scale: 2));
            AlterColumn("dbo.TItems", "UnitPrice", c => c.Decimal(nullable: false, precision: 18, scale: 2));
        

【问题讨论】:

您如何获得这些值?您的问题似乎在于阅读它们。 这些值是通过 http post 接收的。通过放置断点,我可以在后 api 响应中看到相同的 6 位值,但是当我使用 db.savechanges 将其保存在数据库中时,存储的值已将最后 4 位替换为零。 【参考方案1】:

我知道这是旧的,但我总是假设十进制(在实体框架迁移中)用于金钱。所以精度是在模型上设置的,而不是在迁移级别上。对数据库使用双精度,如果需要,使用浮点数,然后根据需要进行转换。

【讨论】:

以上是关于更改十进制默认精度实体框架的主要内容,如果未能解决你的问题,请参考以下文章

如何更改实体框架为日期时间生成 SQL 精度的方式

在 C# 中从十进制转换时会失去精度吗?

Python数字型整理(整型布尔型浮点型复数操作符内建函数与工厂函数控制数字精度)

实体框架无法使用二进制数组添加迁移

oracle中number类型 默认长度是多少

实体框架组和处理空值