c# - Entity Framework : "Parameter value is out of range."

标签 c# sql-server entity-framework

我在 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

{"Parameter value '1215867935736100000.00' is out of range."}

我解决这个问题的方法是将.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();

关于c# - Entity Framework : "Parameter value is out of range.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264558/

相关文章:

c# - Nhibernate通过代码映射,如何使用存储过程?

c# - 获取 ComboBox 中所选项目的 ID

entity-framework - 没有主键的 Entity Framework 多对多关系

entity-framework - 为什么代码优先/EF 对原始 SQL 命令中的字符串使用 'nvarchar(4000)'?

c# - 在 View 完成加载之前调用绑定(bind)属性的 setter

c# - 检测 HWND 可见性变化

php - 如何在php中从sql中获取最大值

sql - 使用子记录数据更新父记录的字段(同一表)

c# - 合并泛型

sql-server - Sql server 表可以查询但不能更新