这是我们的工作环境
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上运行的另一台服务器(生产)上看到这些问题 我们不确定出了什么问题或导致问题的原因。
答案 0 :(得分:1)
当Informix服务器版本升级到12.10 FC7时,问题得到解决。