查询DateTime属性的流畅NHibernate问题

时间:2011-06-29 10:15:22

标签: linq nhibernate fluent-nhibernate

我正在尝试使用针对DateTime的where子句检索行。

注意:Query是来自IQueryable扩展程序的ISession.Query

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

这不会返回任何结果。

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

返回结果。(通过使用ToList()im避免使用NHibernate查询提供程序。)

我错过了哪些技巧?

更新

SQL profiler告诉我它查询

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

但实际列值为'2011-01-28 09:28:55.987'因此没有匹配。

在映射期间(可能是读取)我丢失了亚秒数据。

1 个答案:

答案 0 :(得分:0)

问题是由于该列被用作CompositeId的一部分而引起的。

我无法单独在列上使用CustomType,因为如果列也被定义为CompositeId的一部分,则会忽略它。

解决方案是在Type定义上使用KeyProperty方法。

  mapping.CompositeId()
                .KeyProperty(x => x.Name)
                .KeyProperty(x => x.TimeStampUtc, k => k.Type("DateTime2"));