【问题标题】:Prevent decimal rounding in Entity Framework database first首先防止实体框架数据库中的小数舍入
【发布时间】:2015-12-06 02:01:39
【问题描述】:

我正在尝试使用 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 - 即使它警告更改可能会在重新生成时丢失,以及如何防止代码四舍五入?

任何帮助表示赞赏!

【问题讨论】:

    标签: entity-framework asp.net-mvc-4


    【解决方案1】:

    我是否应该修改上下文文件中的 OnModelCreating - 即使它警告更改可能会在重新生成时丢失以及如何防止代码四舍五入?

    否 - 在另一个文件中实现上下文的部分类并在那里实现 OnModelCreating

    至于精度 - 您是否检查过调试器中对象中的值与页面上显示的值?渲染期间可能会发生舍入。

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

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

    【讨论】:

    • 感谢您的回复。是的,四舍五入发生在渲染中。关于如何防止这种情况的任何建议?
    • 您是否将值分配给呈现它的控件?您可能需要指定格式
    • 是 - 使用 @Html.EditorFor(model => model.LATITUDE)
    • 谢谢! - DisplayFormat 工作 - 让我不必编写扩展名
    • 使用 DataFormatString = "{0:0.000000}" 否则 11.627440 的纬度/经度将显示为 11.62744
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多