在 NHibernate 数据上下文中对 SQL 文本的 Linq 表达式

本文关键字:文本 Linq 表达式 SQL NHibernate 数据 上下文 | 更新日期: 2023-09-27 17:56:39

>假设我已经设置了包含所有关系、表、连接等的 NHibernate 数据上下文。

如何将实例化的 .NET 表达式(实际上它不是一个完整的 SELECT 而只是一个 WHERE 表达式)转换为 SQL 字符串?

我看过很多参考资料。就像使用ExpressionVisiter或构建IQueryable Provider一样,但我相信NHibernate 3具有所有这些实现,我只需要组合一些类即可实现目标。蚂蚁的想法?

在 NHibernate 数据上下文中对 SQL 文本的 Linq 表达式

好吧,在发布这个问题之后,在这里找到了一种方法:如何让 NHibernate 只生成 SQL 而不执行它?

实际上,可以只获取完整 SELECT 查询的文本,否则会引发异常:

无法解析表达式 '(rec.Id == 6)',因为它具有不受支持的类型。只能分析查询源(即实现 IEnumerable 的表达式)和查询运算符。

请参阅我关于如何通过编写自定义批处理器来拦截 sql 查询的另一个答案:NHibernate和拦截器 - 测量/监控SQL往返时间它也适用于 Sql Server,一旦您拦截了查询,您就可以通过返回空结果来自由地阻止它执行。