Linq Expression到NHibernate数据上下文中的SQL文本

时间:2014-04-05 00:25:32

标签: c# nhibernate linq-to-sql expression linq-to-nhibernate

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

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

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

2 个答案:

答案 0 :(得分:0)

嗯,发布此问题后,在此处找到了一种方法:How can I have NHibernate only generate the SQL without executing it?

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

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

答案 1 :(得分:0)

请参阅我的另一个答案,了解如何通过编写自定义batchers来拦截SQL查询: NHibernate and interceptors - measuring/monitoring SQL round-trip times 它也适用于Sql Server,一旦你拦截了查询,你可以通过返回一个空结果来阻止它执行。