2

System.DateTimeこの流暢な nhibernate マッピングを使用して、SQL にタイムスタンプとして aを保存すると、次のようになります。

Map(x => x.LoggedTimeStamp).CustomType("Timestamp")
                           .Not.Nullable();

タイムスタンプを保存して呼び出すと、次のようになります。

new DateTime(2013, 5, 10, 14, 59, 13, 235);

に等しくなりnew DateTime(2013, 5, 10, 14, 59, 13, 237)ます。

2ミリ秒増えました。これは、SQL Server 管理スタジオでも明らかです。

私の質問は、NHibernate に、より正確なフィールド タイプを使用するように指示できますか?

4

2 に答える 2

9

これは、SQL-Server の標準の日時型の制限です。

.000、.003、または .007 秒単位で丸められます

SQL Server 2012 2008 以降でのみ、より正確な日時型があります。NHibernate にそれらを使用させることができるかどうかはわかりません (移植性が損なわれることは確かです)。

または、この精度が非常に重要な場合は、日時の値を数値または文字列として保存し、NHibernate 型コンバーターで変換を行うこともできます。私はかつてそのようなことをしました (誰かが MySQL の 0000-00-00 日付を使用していました) が、それはずっと前のことであり、このアプローチがまだ有効かどうかはわかりません。カスタムデータ型に関するNHibernateのドキュメントを読んでください。

于 2013-06-12T10:27:11.590 に答える