C# 使用Informix的实体框架;-如何修复必须将此属性设置为类型为';的非空值;双倍';

C# 使用Informix的实体框架;-如何修复必须将此属性设置为类型为';的非空值;双倍';,c#,entity-framework,informix,C#,Entity Framework,Informix,这是我们的工作环境 Informix服务器v12.10。(最近从11.5升级而来) IBM数据服务器客户端10.5.3.4(最近从9.7.4升级) 实体框架v 5 C#4.0 我们有一个表,它有两个十进制列,都定义为十进制(11,4)。 在实体类中。两者都声明为类型“decimal?”(列是可为空的类型) 当用十进制值(ex123.345M)更新这两列时,一列值按预期变化,而另一列值仅取整数值 奇怪吧!用于更新两列的代码相同,但只更新了一列 下面是部分代码示例: 数据库表DDL vndr_pac

这是我们的工作环境 Informix服务器v12.10。(最近从11.5升级而来)
IBM数据服务器客户端10.5.3.4(最近从9.7.4升级)
实体框架v 5
C#4.0

我们有一个表,它有两个十进制列,都定义为十进制(11,4)。
在实体类中。两者都声明为类型“decimal?”(列是可为空的类型)

当用十进制值(ex123.345M)更新这两列时,一列值按预期变化,而另一列值仅取整数值
奇怪吧!用于更新两列的代码相同,但只更新了一列

下面是部分代码示例:
数据库表DDL

vndr_pack_net_wgt_qty DECIMAL(11,4),  
vndr_pack_gross_wgt_qty DECIMAL(11,4)  
C#

正在初始化属性:

var dbContext = new ProductContext();

var lineItem = dbContext.Item.FirstOrDefault(x => x.id == 5139);

lineItem.vndr_pack_net_wgt_qty = 125.337M;  
lineItem.vndr_pack_gross_wgt_qty = 126.377M;

dbContext.SaveChanges();
使用125保存的vndr包装净重量,但使用126.377保存的vndr包装总重量
即使使用ADO.Net(不使用实体框架),我们也观察到了相同的结果

但是,当我们在C#program中尝试使用
double
数据类型时,两列都按预期进行了更新

因此,尝试将实体属性类型更改为“double”。"

将一个属性更改为双属性后,我遇到异常

无法将“Cmrcl\u Invc\u Line\u项目”上的“vndr\u pack\u net\u wgt\u qty”属性设置为“十进制”值。必须将此属性设置为 “Double”类型的非空值。

升级和迁移之前,一切正常。
我们在运行Informix 11.5的另一台服务器(生产)上没有看到这些问题。

我们不确定是什么地方出了问题或是什么原因造成了问题。

当Informix server版本升级到12.10 FC7时,问题得到了解决。

@Adriano,在SQL中是十进制(11,4)用C#decimal表示。该注释没有帮助。请包括a。也请阅读谢谢!更新的代码示例,希望有帮助。使用
decimal如何?
?您尝试过吗that@Mafii,当我使用decimal时,一列值已更改,但另一列值未更改。
var dbContext = new ProductContext();

var lineItem = dbContext.Item.FirstOrDefault(x => x.id == 5139);

lineItem.vndr_pack_net_wgt_qty = 125.337M;  
lineItem.vndr_pack_gross_wgt_qty = 126.377M;

dbContext.SaveChanges();
public double? vndr_pack_net_wgt_qty { get; set; }    
public decimal? vndr_pack_gross_wgt_qty { get; set; }      

var lineItem = dbContext.Cmrcl_Invc_Line_Item.FirstOrDefault(x => x.cmrcl_invc_id == 5139);