【发布时间】:2016-10-06 11:41:21
【问题描述】:
这是我们的工作环境
Informix 服务器 v 12.10。 (最近从 11.5 升级)
IBM 数据服务器客户端 10.5.3.4(最近从 9.7.4 升级)
实体框架 v 5
C# 4.0
我们有一个包含 2 个小数列的表,均定义为 decimal(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);
将一个属性更改为双倍后,我得到了异常
“Cmrcl_Invc_Line_Item”上的“vndr_pack_net_wgt_qty”属性无法设置为“十进制”值。您必须将此属性设置为 'Double' 类型的非空值。
在升级和迁移之前,一切都按预期工作。
我们在运行 Informix 11.5 的另一台服务器(生产)上没有看到这些问题。
我们不确定发生了什么问题或导致问题的原因。
【问题讨论】:
-
@Adriano,在 SQL 中是小数(11,4),在 C# 中是小数。
-
谢谢!更新了代码示例,希望对您有所帮助。
-
使用
decimal?怎么样?你试过了吗 -
@Mafii,当我使用十进制时,一列值改变了,但另一列值没有改变。
标签: c# entity-framework informix