我需要Nhibernate
只生成纯SQL,我将发送给我的C函数。
答案 0 :(得分:3)
自定义驱动程序
通过实现NHibernate.Driver.IDriver
构建一个调用C层的驱动程序。
SQLite驱动程序是一个很好的起点,因为它是一个C库。您的IDriver几乎与SQLiteDriver相同。 NHibernate source code对此很有用。
您还需要一个用于C库的IDbConnection包装器。在SQLite包装器中,csharp-sqlite具有最小的源,它应该是有用的。
<强> ODBC 强>
NHibenate已经有一个ODBC连接驱动程序,NHibernate.Driver.OdbcDriver
。
答案 1 :(得分:2)
没有一种简单的方法可以做到这一点。理论上,NHibernate根本不需要生成SQL;只是你的方言发生了(例如,它可能只有一些文本文件作为数据存储)。该接口不公开SQL,因为它打破了抽象障碍。
但是,如果使用show_sql选项,NHibernate将记录SQL,您可以使用它。我能想到的唯一方法是设置一个虚拟数据库并对它运行NH查询。构建自定义log4net appender以捕获SQL并将其存储在变量中。现在,您可以将其与查询相关联。那么你就会有像
这样的东西RunQueryAndCaptureSql(session.CreateQuery("from Stuff s where s.Thing = 'dude'"));
阻止等待appender附加SQL然后返回它。像地狱一样优雅,你必须确保你处理线程问题,但它应该工作。
坦率地说,我可能只是破解NH源。