SQL Server Decimal - 为什么我的十进制值只捕获十进制后的两位小数?是的,它是小数(18,5)

时间:2013-04-17 21:04:41

标签: c# sql sql-server

我首先要说我的十进制数据类型定义为十进制(18,5):

enter image description here

我的应用程序在到达数据库之前的值是:

enter image description here

所以到目前为止你看到的一切看起来都不错。我应该在我的数据库表中看到列Capsule105的值为0.47588。但是,在我的记录保存到数据库后,我查看它插入的记录 - 看看最后一行:

enter image description here

两位小数后,该值不应停止。它应该转到我的数据库中定义的最后一个小数位,对吧?

这是我的InsertOrUpdate方法(VS中的模板库存):

public void InsertOrUpdate(CalculatedResults calculatedresults)
{
    if (calculatedresults.Pk == default(int)) {
        // New entity
        context.CalculatedResults.Add(calculatedresults);
    } else {
        // Existing entity
        context.Entry(calculatedresults).State = EntityState.Modified;
    }
}

我正在使用Code First方法并从我的模型生成我的数据库。

任何想法在这里发生了什么?请帮忙!!

2 个答案:

答案 0 :(得分:4)

我遇到了类似的问题,所以这可能会有所帮助:我必须在DbContext中指定类型。在我的例子中,数据库中的字段是Money类型,而models属性的C#类型是Decimal

modelBuilder.Entity<MyEntity>().Property(e => e.Value).HasColumnType("Money");

不知道,但是如果你把它改成“十进制”甚至“十进制(18,5)”,如果可能的话,也许它可行。或者拿起ta.speot的评论:

modelBuilder.Entity<MyEntity>().Property(e => e.Value)
            .HasColumnType("Decimal")
            .HasPrecision(18, 5);

答案 1 :(得分:0)

@Mike Marks

您可以解决此问题,如下面对DBContext类中 OnModelCreating 方法的更改

protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Table1>().Property(a => a.price).HasPrecision(18, 5); }