2010-12-21 65 views
3

我們有一個NHibernate應用程序,我們正在從SQL Server遷移到Oracle。我們的樂觀併發是通過一個<timestamp name="Version">映射元素實現的。NHibernate <timestamp>針對Oracle數據庫原因的映射StaleStateException

Oracle中對應的Version列的數據類型爲DATE。保存對象後,內存中的C#對象留有時間戳值(毫秒)(例如12:34:56.789),而數據庫中的值僅精確到秒(例如12:34:56)。因此,如果我們嘗試第二次保存對象,則會出現StaleStateException,因爲這兩個值不匹配。

我試圖通過將Version列的數據類型更改爲TIMESTAMP(3)來解決此問題。不幸的是,C#對象和DB值仍然偏離一毫秒(例如12:34:56.789 vs 12:34:56.788),所以第二次保存對象仍然會導致StaleStateException。

如何創建映射到類型爲DATETIMESTAMP的Oracle列的工作<timestamp>,以便可以多次保存同一個對象?

謝謝。

- 布賴恩

回答

4

TIMESTAMP(7)具有正確的精度相匹配的.NET DateTime類和固定的問題。

+0

我有NHibernate代碼第一。鍵入「Timestamp」會生成一個類型爲TIMESTAMP(4)的oracle字段。我怎樣才能讓它生成TIMESTAMP(7)? – 2017-03-28 13:40:16