【问题标题】:IQueryable Extension to Generate Temporal Table "AS OF" Queries用于生成临时表“AS OF”查询的 IQueryable 扩展
【发布时间】:2019-04-08 23:27:57
【问题描述】:

未能找到令人满意的解决方案,让我在这里发布:

我们使用 NHibernate 作为我们的 ORM,并且刚刚开始使用 Sql Server 时态表。因此,我们需要对 IQueryable(或 HQL Builder 或 InterceptingProvider 或 something)进行某种扩展,以允许我们在查询中添加“AS OF”子句,像

var results = session.Query<Company>
.Where(c => c.Name == "FogCreek")
.AsOf(DateTime.Today.AddYears(-1));

【问题讨论】:

  • 您是否考虑过扩展适当的Dialect
  • 我对此非常感兴趣,但我没有找到任何示例。你能指点我一些吗?

标签: sql sql-server nhibernate iqueryable temporal-tables


【解决方案1】:

我也一直在苦苦挣扎并放弃了,因为我浪费了太多时间试图找到更好的方法......

到目前为止,我已经使用自定义 HqlGeneratorForMethodFOR SYSTEM_TIME AS OF 注入 SQL 中,但这给了我无效的 SQL 表达式。所以我不得不在OnPrepareStatement 中修复它。这是 hacky 且不优雅的解决方案,但适用于大多数简单的情况。

请查看我的解决方案here,如果您找到更好的解决方案,请随时回复

【讨论】:

  • 非常感谢。我目前的想法是,我将简单地分别映射历史表并在常规查询中使用它们的时间戳字段。如果我想要一个查询从 either 历史表 主表中检索数据,这 not 有帮助,具体取决于时间戳 -为此,我仍然需要 AsOf。
  • 如果您总是向后查询精确的一年,您可以考虑使用FOR SYSYEM_TIME AS OF... 编写数据库视图并将它们与模式绑定进行映射。如果您有多个连接,这将简化整个查询,因为 FOR SYSYEM_TIME AS OF... statement 仅适用于临时表,因此您不必担心
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 2022-08-20
相关资源
最近更新 更多