在 Entity Framework 数据库优先模式下如何防止小数四舍五入

7

我正在尝试使用C#,实体框架-数据库优先和MVC将纬度和经度写入/读取MS SQL数据库。

问题在于,即使在数据库中正确,纬度/经度仅显示为2个小数位。 数据库将字段设置为numeric(18,6)。

我已按以下方式修改了上下文文件:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<STORE_LOCATION>().Property(location => location.LATITUDE).HasPrecision(18, 6);
        modelBuilder.Entity<STORE_LOCATION>().Property(location => location.LONGITUDE).HasPrecision(18, 6);
    }

2个问题 - 我是否应该修改上下文文件中的OnModelCreating,尽管它警告表示在重新生成时更改可能会丢失,以及如何防止代码对小数进行四舍五入?

感谢任何帮助!

1个回答

4

我应该修改上下文文件中的OnModelCreating吗?尽管它警告说更改可能会在重新生成时丢失,如何防止代码将小数舍入?

不需要-在另一个文件中实现您的上下文的partial类,并在那里实现OnModelCreating。

至于精度-您是否检查了调试器中对象的值与页面显示的值? 舍入可能发生在呈现期间。

请尝试在实体类中的属性中添加DisplayFormat属性:

[DisplayFormat(DataFormatString = "{0:0.0#####}", ApplyFormatInEditMode = true)]

谢谢您的回复。是的,舍入是在渲染过程中发生的。您有什么建议可以防止这种情况发生吗? - user1069733
你是在给一个渲染控件赋值吗?你可能需要指定格式。 - Moho
是的 - 使用@Html.EditorFor(model => model.LATITUDE) - user1069733
谢谢!DisplayFormat 起了作用,让我不必编写扩展。 - user1069733
使用 DataFormatString = "{0:0.000000}",否则显示纬度/经度 11.627440 时会变成 11.62744。 - Frank
[DisplayFormat(DataFormatString = "{0:0.0000}", ApplyFormatInEditMode = true)] public decimal decimalNumber { get; set; }---但是当我输入像9.0098这样的值时,它会将其更改为9.0000,这里我只需要小数点后面的4位精确值,所以在decimal中是否可能实现? - SAR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接