【问题标题】:NHibernate query with filter by timestamp field带有按时间戳字段过滤的 NHibernate 查询
【发布时间】:2013-02-25 22:44:06
【问题描述】:

我有一个带有 Timestmap 类型的版本控制字段的表。现在我正在尝试通过此字段搜索进行查询,但是当我以下一种方式传递参数时:

query.SetParameter("TimeStamp", lastTick, NHibernateUtil.Timestamp);

它将它作为 DateTime 传递给 sql 查询。也尝试过 NHibernateUtil.Binary,但 nhibernate 将其作为 varbinary 传递。

【问题讨论】:

  • lastTick的类型是什么?
  • 它是MSDN指定的8字节数组

标签: c# .net sql nhibernate


【解决方案1】:

NHibernate TimestampType 指定:

除了可以使用之外,这几乎与 DateTime 完全相同 在版本列中,将其存储到数据库支持的精度, 如果值为 null,则默认为 DateTime.Now 的值。

这种类型根本不能与 MS SQL 类型 TIMESTAMP 一起使用。事实上,该列类型已被弃用:

不推荐使用时间戳语法。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

rowversion (Transact-SQL)

您应该使用NHibernateUtil.BinaryNHibernateUtil.BinaryBlob

【讨论】:

  • 数据库真的很旧,这就是为什么时间戳列在其中。已经尝试过 Binary 和 BinaryBlob - 它们都将 varbinary 传递给数据库,但它不起作用。
  • 问题出在我的查询中,而不是在转换字节数组中。 NHibernateUtil.BinaryBlob 效果很好,谢谢。
  • @Mardok:如果这能引导您找到解决方案,您能否将其标记为答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2021-03-31
  • 2019-03-15
  • 2019-02-20
  • 2023-01-04
  • 2020-06-27
  • 1970-01-01
相关资源
最近更新 更多