2010-12-21 10 views
3

SQL ServerからOracleに移行するNHibernateアプリケーションがあります。私たちの楽観的同時実行は<timestamp name="Version">マッピング要素を介して実装されています。NHibernate <timestamp> OracleデータベースのマッピングによってStaleStateExceptionが発生する

Oracleの対応するVersion列のデータ型はDATEです。オブジェクトを保存した後、メモリ内のC#オブジェクトにミリ秒単位のタイムスタンプ値(たとえば12:34:56.789)が残されますが、データベースの値は正確に2番目の値(12:34:56など)になります。したがって、2回目にオブジェクトを保存しようとすると、2つの値が一致しないためStaleStateExceptionが発生します。

Version列のデータ型をTIMESTAMP(3)に変更することでこれを解決しようとしました。残念ながら、C#オブジェクトとDB値は1ミリ秒(12:34:56.789 vs 12:34:56.788など)でまだオフであるため、オブジェクトを保存する2回目の試みでもStaleStateExceptionが発生します。

私は、同じオブジェクトが複数回保存することができるように、Oracle型DATEの列またはTIMESTAMPに取り組ん<timestamp>マッピングを作成するために何ができますか?

ありがとうございました。

- ブライアン

答えて

4

TIMESTAMP(7).NET DateTimeクラスに一致する正しい精度を持ち、問題を修正しました。

+0

私はNHibernateのコードを最初に持っています。タイプ "タイムスタンプ"は、タイプTIMESTAMP(4)のOracleフィールドを生成します。どうすればTIMESTAMP(7)を生成させることができますか? –

関連する問題