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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

这是我的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方法并从我的模型生成我的数据库。

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

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

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

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

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

@Mike Marks

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

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