NHibernate和SQL Server时态表

dhxwm5r4  于 2023-01-12  发布在  SQL Server
关注(0)|答案(1)|浏览(156)

我正在使用Fluent NHibernate查询存储在SQL Server temporal table中的数据。

SELECT * FROM [MyDB].[dbo].[MyTable] for system_time as of '2022-12-28T21:00:00.0000000' where ...

通过NHibernate。看起来NHibernate中没有任何内置的方法可以运行该查询。我可以运行下面这样的查询,但这只会命中当前表,而不会命中历史表。

session.QueryOver<MyDTO>().Where(x => x.TemporalPeriodStart > ...)
brccelvz

brccelvz1#

您可以执行本机SQL查询(并返回非托管实体)。查询需要指定:

  • 查询字符串
  • A结果转换器

示例:

session.CreateSQLQuery("SELECT * FROM [MyDB].[dbo].[MyTable] for system_time as of '2022-12-28T21:00:00.0000000' where...")
    .SetResultTransformer(Transformers.AliasToBean(typeof(CustomObject)))

值得注意的是,自定义IResultTransformer应该覆盖"Equals"和"GetHashCode",否则由于查询转换不会被缓存,可能会发生内存泄漏。
您还可以使用命名SQL查询,它可以在Map文档中定义,并以与命名HQL查询相同的方式调用...

相关问题