我定义了一个像这样的表格列:
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);
}
答案 0 :(得分:2)
您可以创建一个属性来缩放数字。
像这样创建一个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));
}
}
然后在您的上下文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; }