C# 使用Informix的实体框架;-如何修复必须将此属性设置为类型为';的非空值;双倍';
这是我们的工作环境 Informix服务器v12.10。(最近从11.5升级而来)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
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);