【问题标题】:Entity Framework with Informix; - How to fix You must set this property to a non-null value of type 'Double'带有 Informix 的实体框架; - 如何修复您必须将此属性设置为“Double”类型的非空值
【发布时间】: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# 中是小数。
  • 该评论没有帮助。请包括Minimal, Complete, and Verifiable example。另请阅读How do I ask a Good Question
  • 谢谢!更新了代码示例,希望对您有所帮助。
  • 使用decimal?怎么样?你试过了吗
  • @Mafii,当我使用十进制时,一列值改变了,但另一列值没有改变。

标签: c# entity-framework informix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多