有没有一种方法可以在不连接数据库的情况下使用NHibernate?

时间:2010-02-26 14:51:59

标签: nhibernate

我需要Nhibernate只生成纯SQL,我将发送给我的C函数。

2 个答案:

答案 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源。