我在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();