簡體   English   中英

無法保存負十進制值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM