簡體   English   中英

帶有 Informix 的實體框架; - 如何修復您必須將此屬性設置為“Double”類型的非空值

[英]Entity Framework with Informix; - How to fix You must set this property to a non-null value of type 'Double'

這是我們的工作環境 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);   

將一個屬性更改為雙倍后,我遇到了異常

“Cmrcl_Invc_Line_Item”上的“vndr_pack_net_wgt_qty”屬性無法設置為“Decimal”值。您必須將此屬性設置為“Double”類型的非空值。

在升級和遷移之前,一切都按預期工作。
我們在 Informix 11.5 上運行的另一台服務器(生產)上沒有看到這些問題。
我們不確定出了什么問題或導致問題的原因。

當 Informix 服務器版本升級到 12.10 FC7 時,問題得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM