【问题标题】:Can't save negative decimal values无法保存负十进制值
【发布时间】:2012-04-10 19:33:13
【问题描述】:

我首先使用实体​​框架代码。尝试将负十进制值保存到 SQL Server 数据库时发生错误。下面列出了我要保存的模型。

public class Material
{
        public Material()
        {
            Categories = new List<Category>();
        }

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        [Required]
        public string Name { get; set; }
        public string Description { get; set; }
        [Required]
        public DateTime Taken { get; set; }
        public decimal? Latitude { get; set; }
        public decimal? Longitude { get; set; }
        public virtual ICollection<Category> Categories { get; set; }
    }

这里我尝试在模型材质中设置小数点的精度(纬度/经度)。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
        modelBuilder.Entity<Material>().Property(x => x.Latitude).HasPrecision(8, 7);
        modelBuilder.Entity<Material>().Property(x => x.Longitude).HasPrecision(8, 7);
 }

在数据库中,列信息如下所示:

dbo.Materials.Latitude (decimal(8, 6), null)

dbo.Materials.Longitude (decimal(8, 6), null)

如果我尝试保存像 -1m 这样的负值,一切正常。但是,一旦我尝试保存任何更大的值或带有小数的值,例如-123-123.123456,数据上下文在保存时总是会抛出异常。

我得到的例外是:

保存不公开外键的实体时出错 他们关系的属性。 EntityEntries 属性将 返回 null,因为无法将单个实体标识为源 的例外。可以进行保存时的异常处理 通过在实体类型中公开外键属性更容易。看 InnerException 了解详情。

查看内部异常,我们可以看到这可能是问题的原因:

{"参数值'-117.246108'超出范围。"}

我该如何解决这个问题?

【问题讨论】:

  • 你能告诉我数据单元的类型吗?
  • 该字段的架构是什么样的?

标签: c# entity-framework-4.1 ef-code-first sql-server-2008-r2


【解决方案1】:

据我所知,扩展名为“HasPrecision(8, 7)”,您将小数定义为总共有 8 位数字;右侧最多有 7 位数字。 小数 -117.246108 有 9 位,尝试更改“HasPrecision(9, 7)”。

【讨论】:

    【解决方案2】:

    它的行为与您配置的模型完全相同。 HasPrecision(8,7) 表示小数点两边允许的总位数为8,小数点右侧的总位数为7。所以小数点左侧只能有一位数。要存储“-117.246108”,您至少需要精度 9 和小数位数 6。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-30
      • 2012-01-15
      • 2011-02-04
      • 2014-03-31
      • 2015-02-11
      • 1970-01-01
      • 2016-12-14
      • 2013-01-26
      相关资源
      最近更新 更多