小数超出范围 C# 和 SQL Server

the*_*mer 2 c# sql-server entity-framework decimal

我有一个像这样的 C# 实体框架类:

public class Card 
{
    public decimal CardNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在数据库中,该值的存储方式如下:

[card_number] [decimal](38, 2) NULL
Run Code Online (Sandbox Code Playgroud)

然后当我去运行这段代码时:

 entities.Set<Card>().Add(card);
 entities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

(保存更改应该会失败)

我似乎得到了这个例外:

参数值“2509067194275615035776.00”超出范围。

我尝试在 SQL Server Management Studio 中手动插入该值,它似乎工作正常......

bigint请注意,这最近从 C# 中的 long 和SQL Server 中的a 更改为decimalC# 中的 long 和decimalSQL Server 中的 a ...

我还有这个配置类,看起来像这样,并将 C# 对象映射到数据库......

public class CardConfiguration : TrackedEntityConfiguration<Card>
{
    public CardConfiguration()
    {
        ToTable("Card", "dbo");
       
        Property(c => c.CardNumber)
             .HasColumnName("card_number") 
             .IsRequired();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我会收到此异常,因为它似乎不大于 SQL Server 中的十进制最大值......

我对实体框架有点陌生,所以也许我在某个地方缺少一些其他配置?

Bro*_*ies 5

您需要指定小数的精度。例如:

Property(c => c.CardNumber).HasColumnName("card_number").HasPrecision(18, 6);
Run Code Online (Sandbox Code Playgroud)

精度取决于您的 SQL 列定义。请参阅列属性对话框: SQL 属性对话框中的数字精度