由于未能找到令人满意的解决方案,让我在这里发布:
我们使用NHibernate作为我们的ORM,并且刚刚开始使用SqlServer时态表。因此,我们需要对IQueryable(或HQL Builder或InterceptingProvider或(进行某种扩展,以允许我们在查询中添加"AS of"子句,类似
var results = session.Query<Company>
.Where(c => c.Name == "FogCreek")
.AsOf(DateTime.Today.AddYears(-1));
我也一直在努力,因为我花了太多时间试图找到更好的方法而放弃了。。。
到目前为止,我已经使用自定义HqlGeneratorForMethod
将FOR SYSTEM_TIME AS OF
注入到SQL中,但这给了我无效的SQL表达式。所以我不得不在OnPrepareStatement
中修复它。这是一个棘手而不优雅的解决方案,但适用于大多数简单的情况。
请在这里查看我的解决方案,如果您找到更好的解决方案,请随时回复