Informix的实体框架; - 如何修复您必须将此属性设置为类型为' Double'的非空值。

时间:2016-10-06 11:41:22

标签: c# entity-framework informix

这是我们的工作环境 Informix Server v 12.10。 (最近从11.5升级)
IBM Data Server Client 10.5.3.4(最近从9.7.4升级)
实体框架v 5
C#4.0

我们有一个包含2个十进制列的表,两个列都定义为十进制(11,4) 在实体类中。两者都被声明为"十进制?" (列是可以为空的类型)

使用十进制值(例如123.345M)更新这两列时,一列值按预期更改,但另一列仅取整数值!
奇怪吧!相同的代码用于更新两列,但只有一个更新!

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

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

C#

public partial class Cmrcl_Invc_Line_Item  
{   
public decimal? vndr_pack_net_wgt_qty { get; set; }    
public decimal? vndr_pack_gross_wgt_qty { get; set; }  
}  

初始化属性:

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

vndr_pack_net_wgt_qty以 125 保存,但vndr_pack_gross_wgt_qty已保存 126.377
即使使用ADO.Net(不使用实体框架),我们也观察到了相同的结果。

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

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

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);   

将一个属性更改为double后,我将获得异常

  

' vndr_pack_net_wgt_qty'属于' Cmrcl_Invc_Line_Item'无法设置为“十进制”' value。您必须将此属性设置为a   类型为' Double'

的非空值

在升级和迁移之前,一切都按预期工作 我们没有在Informix 11.5上运行的另一台服务器(生产)上看到这些问题 我们不确定出了什么问题或导致问题的原因。

1 个答案:

答案 0 :(得分:1)

当Informix服务器版本升级到12.10 FC7时,问题得到解决。