[英]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.