簡體   English   中英

插入時刪除刻度數字(超過2位)

[英]scale numbers (more than 2 digits) removed on insertion

我定義了一個表列,如下所示:

Column name: Lat
DataType: decimal(9,6)

我的模型定義:

    [DisplayFormat(DataFormatString = "{0:000.000000}", ApplyFormatInEditMode = true)]
    [Column(TypeName = "decimal")]
    public decimal Lat { get; set; }

[如上所述,我手動將列更改為十進制(9,6)]
我使用EF6在數據庫中創建新記錄。

當我要為Lat插入值35.6997311時 ,數據庫中的結果為35.690000 (將4位數字轉換為零)。

為什么EF刪除數字並插入零而不是數字? 以及如何在數據庫中插入完整號碼?

我的控制器插入動作:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Lat,CreatedAt")] Example example)
{
    if (ModelState.IsValid)
    {
        db.Agencies.Add(example);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(example);
}

您可以創建一個屬性來縮放數字。

創建這樣的DecimalPrecision屬性;

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class DecimalPrecision : Attribute
{
    public byte precision { get; set; }
    public byte scale { get; set; }
    public DecimalPrecision(byte precision, byte scale)
    {
        this.precision = precision;
        this.scale = scale;
    }
    public static void ConfigureModelBuilder(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties().Where(x => x.GetCustomAttributes(false).OfType<DecimalPrecision>().Any())
            .Configure(c => c.HasPrecision(c.ClrPropertyInfo.GetCustomAttributes(false).OfType<DecimalPrecision>().First()
                .precision, c.ClrPropertyInfo.GetCustomAttributes(false).OfType<DecimalPrecision>().First().scale));
    }
}

然后在您的Context OnModelBuilder函數中,調用DecimalPrecision.ConfigureModelBuilder()方法

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    DecimalPrecision.ConfigureModelBuilder(modelBuilder);
}

用法;

在屬性上添加DecimalPrecision屬性;

[DisplayFormat(DataFormatString = "{0:000.000000}", ApplyFormatInEditMode = true)]
[Column(TypeName = "decimal")]
[DecimalPrecision(9,6)]
public decimal Lat { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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