针对 DateTime 属性的流畅 NHibernate 查询问题

发布于 2024-11-17 19:35:08 字数 715 浏览 1 评论 0原文

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

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

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

这不会返回任何结果。

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

这会返回结果。(通过使用 ToList(),我可以避免使用 NHibernate 查询提供程序)。

我缺少什么技巧?

更新:

SQL 探查器告诉我,它正在查询

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

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

在映射(大概是读取)过程中的某个地方,我丢失了亚秒数据。

I'm trying to retrieve a row using a where clause against a DateTime.

Note: Query is an IQueryable from ISession.Query extension.

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

This returns no results.

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

This returns results. (By using ToList() im avoiding the NHibernate query provider).

What trick am I missing?

Update:

SQL profiler tells me that its querying for

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

but the actual column value is '2011-01-28 09:28:55.987' hence no matches.

Somewhere during mapping (presumably reading) I am losing the sub-second data.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一曲爱恨情仇 2024-11-24 19:35:08

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

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

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

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

The problem was caused by the fact the column was used as part of a CompositeId.

I could not use CustomType on the column alone, because its ignored if the column is also defined as part of a CompositeId.

The solution is the use the Type method on the KeyProperty definition.

  mapping.CompositeId()
                .KeyProperty(x => x.Name)
                .KeyProperty(x => x.TimeStampUtc, k => k.Type("DateTime2"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文