0

我首先使用实体​​框架代码。尝试将负十进制值保存到 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' 超出范围。"}

我怎么解决这个问题 ?

4

2 回答 2

2

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

于 2012-04-10T10:55:26.010 回答
1

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

于 2012-04-10T10:55:37.853 回答