簡體   English   中英

使用Entity Framework 5 to Oracle 11g / 12c時,System.Decimal發生在System.Decimal到Oracle Float

[英]Truncation Occurs on System.Decimal to Oracle's Float when using Entity Framework 5 to Oracle 11g/12c

我首先使用Entity Framework 5代碼與Oracle 11g或12c數據庫進行通訊(我已經驗證了兩個版本中的問題)。 Oracle字段是FLOAT類型,而POCO中的字段是decimal 我使用decimal因為我需要我的小數位數能精確到5位數字。

保存實體時,數據庫中的結果記錄始終將值四舍五入到小數點后兩位。

我已經通過數據庫工具(Toad)驗證了該列將支持5的精度。由於向后兼容,我無法更改數據庫中的數據類型。 我發現使用double不會有相同的問題。 但是double因給出不精確的數字而臭名昭著,尤其是在執行多個數學運算時。

有誰知道為什么decimal值會被截斷? 我正在使用Oracle數據提供程序。

@Grant在上述評論中提供的鏈接提供了答案。 我在這里解釋一下。 decimal值的默認映射是到Oracle DECIMAL(18,2) 這就是為什么它四舍五入到兩位小數的原因。 為了更改默認行為,您必須在Context類內的OnModelCreating覆蓋中添加一條語句。 (在EF6你可以改變約定所有的decimal如指出,在一次場在這里 。)

更改特定Decimal字段的Decimal映射

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //...

    modelBuilder.Entity<MyEntity>().Property(x => x.MyProperty).HasPrecision(18, 5);

    //...
}

暫無
暫無

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

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