[英]Can't save negative decimal values
我首先使用實體框架代碼。 嘗試將負十進制值保存到 SQL 服務器數據庫時發生錯誤。 下面列出了我要保存的 model。
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; }
}
在這里,我試圖在 model 材料中設置小數點(緯度/經度)的精度。
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’超出范圍。”}
我怎么解決這個問題?
據我所知,擴展名“HasPrecision(8, 7)”,您將小數定義為總共 8 位; 右側最多有 7 位數字。 小數 -117.246108 有 9 位,嘗試更改“HasPrecision(9, 7)”。
它的行為與您配置的 model 完全相同HasPrecision(8,7)
表示小數點兩側允許的總位數為 8,小數點右側的總位數為 7。因此您只能擁有小數點左邊的一位數。 要存儲“-117.246108”,您至少需要精度 9 和小數位數 6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.