2011-03-09 88 views
7

全部,NHibernate 3.0將小數舍入到5位小數 - 爲什麼?

我們在使用NHiberate 2.1存儲十進制值(匯率),例如123.1234567到小數點後7位

我們正在映射使用缺省的映射風格類型:

<property name="ExchangeRate" not-null="true" /> 

然而,當我們升級到NHibernate的3.0以上保存爲123.1234500值。

雖然它似乎細節它不指定在3.0版本說明此更改的行爲,在問題[NH-1594],十進制的默認值是DECIMAL(19,5)

我們有一個解決方案,即指定以下映射:

<property name="ExchangeRate" type="decimal(10,7) not-null="true" /> 

我需要知道的是這種解決方案的正確方法來解決這個問題? 另外,爲什麼在2.1和3.0之間舍入時行爲會發生功能變化?

乾杯,

比利堆棧

+0

您確定它不是因爲數據庫設計?在嘗試3.0時使用相同的數據庫模式嗎? – jishi

+0

對不起,應該是type =「decimal(14,7) – bstack

+0

是的,完全相同的數據庫設計。如果我翻轉回舊版本的NHibernate,問題不存在。 – bstack

回答

9

這樣的作品,但這是清潔IMO:

<property name="ExchangeRate" precision="10" scale="7" /> 

非空小數是由物業類型暗示。

+0

我更喜歡另一種方式 – bstack

+0

然而,我的問題是爲什麼它在NH 3中默認舍入到5位小數,而它在NH2.1中沒有這樣做...... – bstack

+2

@bstack這就是你的問題可以在nhibernate-development列表中查詢,無論如何,確切的數字類型應該是確定性的,所以最好是比信任無證書的默認值更明確。 –