2011-06-29 4 views
2

DateTimeに対してwhere句を使用して行を取得しようとしています。Fluent NHibernate problem to DateTimeプロパティの問い合わせ

注:Queryは、IQueryableからISession.Queryまでです。

var results = Query 
    .Where(row => row.TimeStampUtc == timeStampUtc); 

これは結果を返しません。

var results = Query.ToList() 
    .Where(row => row.TimeStampUtc == timeStampUtc); 

これは結果を返します。(NHibernateクエリプロバイダを避けてToList()を使用することによって)。

私の欠点は何ですか?

更新:

SQLプロファイラは

where row.TimeStampUtc = '2011-01-28T09:28:55.00' /* @p0 */ 

のためにそのクエリと言われますが、実際の列の値が'2011-01-28 09:28:55.987'ので、ノー一致しています。

マッピング中(おそらく読み込み中)のどこかで、サブ秒のデータが失われています。

+0

dbはどのように定義されていますか? – Variant

+0

SQL2008。列は自動マッピングされます。私は今働いていたCustomType(DateTime2)を調査していますが、列がCompositeId定義の一部でもあるために動作しないようです...同時にCustomTypeを確認しながらCompositeIdを行う方法を見つける必要があります – Schneider

答えて

0

この問題は、列がCompositeIdの一部として使用されたために発生しました。

カラムがCompositeIdの一部として定義されている場合は無視されるため、カラムだけでCustomTypeを使用することはできませんでした。

解決策は、KeyProperty定義でTypeメソッドを使用することです。

mapping.CompositeId() 
       .KeyProperty(x => x.Name) 
       .KeyProperty(x => x.TimeStampUtc, k => k.Type("DateTime2")); 
関連する問題