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