2

nhibernate では、以下を使用して日付を比較しています

Restrictions.Eq(Projections.Property("SubmittedDate"), request.Data.SubmittedDateTime.Value)

ローカル環境でその作業。しかし、他の環境では結果が返されません。

SubmittedDateTime? is nullable

マッピング ファイルのどこかで nullable について言及する必要がありますか。

このためにコードで行う必要がある変更はありますか?

4

1 に答える 1

0

スティーブン、

問題は、運用サーバーで ANSI null が有効になっていることである可能性があります [1]: http://msdn.microsoft.com/en-us/library/ms188048.aspx。このような場合、ある NULL 値は別の値と同じではありません。例えば

DECLARE @a INT,
        @b INT

SELECT @a = null, @b=null

IF(@a=@b)
BEGIN
    SELECT 'Equal'
ELSE
    SELECT 'NOT Equal'
END

ANSI NULLS ON の環境で以下のコードを実行すると、「NOT Equal」が表示されます。

日付に時間コンポーネントが設定されている可能性もあります。

2012-09-26 22:16:00.000 <> 2012-09-26

このためには、DATEDIFF(D, Date1, Date2)=0 を使用する必要があります。

NHibernate はそのままではこれをサポートしていないため、カスタム ICriterion を作成 (または検索) する必要があります。

于 2012-09-26T21:20:54.820 に答える