我在EntityFramework(模型优先)中保存小数存在问题。
在我的EDMX中,我将自己的属性声明为Decimal(30,10),然后尝试保存该数字:
'1215867935736100000'

结果是:

Parameter value '1215867935736100000' is out of range.


我尝试使用SQL Server 2008 R2 Management Studio进行INSERT查询

INSERT INTO MyTable (MyColumn) VALUES (1215867935736100000)


并且记录已正确保存。

你有什么主意吗?

谢谢,
最高

最佳答案

这可能与您使用的EF版本有关。

我有问题的代码优先版本,几乎可以重现您遇到的错误。我收到的错误消息中包含.00


  {“参数值'1215867935736100000.00'超出范围。”}


我解决的方法是将.HasPrecision(30,10)添加到EntityTypeConfiguration类。

this.Property(t => t.value)
    .HasColumnName("value")
    .HasPrecision(30,10) //this line resolves the problem in my test code
    .IsRequired();


这不能解决您的问题,但我至少可以确认Entity Framework是否可以将值1215867935736100000写入数据库。

CREATE TABLE [dbo].[TestTable1](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [value] [decimal](30, 10) NOT NULL
) ON [PRIMARY]


测试代码:

MyContext testTableContext = new MyContext();
TestTable1 testTable1 = new TestTable1();
testTable1.value = 1215867935736100000;
testTableContext.TestTable1.Add(testTable1);
testTableContext.SaveChanges();

10-05 21:15