我首先使用实体框架代码。尝试将负十进制值保存到 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' 超出范围。"}
我怎么解决这个问题 ?