C# 实体框架数据库第一个十进制精度
我是MVC新手,我使用数据库优先(SQLServer2008)方法使用EF6。我的问题是,我试图用3位小数保存一个十进制值,保存是可以的,但当我在SQL Server 2008数据库中查看它时,它保存了2位精确的小数,然后是0C# 实体框架数据库第一个十进制精度,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我是MVC新手,我使用数据库优先(SQLServer2008)方法使用EF6。我的问题是,我试图用3位小数保存一个十进制值,保存是可以的,但当我在SQL Server 2008数据库中查看它时,它保存了2位精确的小数,然后是0 例如,我试图保存0.025,我可以看到它在我的保存方法中通过了0.025,但当我查看数据库中保存的内容时,它是0.0200,数据库数据类型是decimal(18,4)。我做错了什么?请帮忙 更新: 我可能已经发现类似的问题被问到并回答了,我必须在创建模型时设置十进制精度,
例如,我试图保存0.025,我可以看到它在我的保存方法中通过了0.025,但当我查看数据库中保存的内容时,它是0.0200,数据库数据类型是decimal(18,4)。我做错了什么?请帮忙 更新:
我可能已经发现类似的问题被问到并回答了,我必须在创建模型时设置十进制精度,但我如何才能做到这一点,因为它似乎只适用于代码优先的方法:
modelBuilder.Properties().Configure(c=>c.HasPrecision(18,3));
过程并不像可能的那样清晰,但您可以在属性中执行。请参见以下两个链接:
附图:
我看到了长话短说的答案,以下是答案 步骤1 将sql server数据库表的数据类型更改为“float” 步骤2 将相应的ASP.NET模型属性数据类型更改为“double” 这将很容易解决问题 但是,保存(在创建)和编辑(在编辑)视图时可能会出错。要解决这些问题,只需将@Html.EditFor更改为与属性名同名的手动文本框 同样,在列表和详细信息中,使用model属性代替@Html.DisplayFor方法 对于那些仍然不清楚如何更改视图、模型数据类型和数据库表数据类型的人,这里是 但是,如果您了解ASP.NETMVC和EntityFramework的基础知识,则无需阅读完整的文章
modelBuilder.Properties<decimal>().Configure(c => c.HasPrecision(18, 3));