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

有没有一种方法可以在不连接DB的情况下使用NHibernate?,nhibernate,Nhibernate,我需要Nhibernate只生成纯SQL,我会将其发送到我的C函数。没有简单的方法可以做到这一点。理论上,NHibernate根本不需要生成SQL;只是您的方言碰巧发生了(例如,它可能只是有一些文本文件作为数据存储)。接口不公开SQL,因为它打破了抽象障碍 但是,如果使用show_sql选项,NHibernate将记录sql,您可以使用它。我能想到的唯一方法是建立一个虚拟数据库并对其运行NH查询。构建一个定制的log4net appender来捕获SQL并将其存储在一个变量中。现在您可以将其与查

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

没有简单的方法可以做到这一点。理论上,NHibernate根本不需要生成SQL;只是您的方言碰巧发生了(例如,它可能只是有一些文本文件作为数据存储)。接口不公开SQL,因为它打破了抽象障碍

但是,如果使用show_sql选项,NHibernate将记录sql,您可以使用它。我能想到的唯一方法是建立一个虚拟数据库并对其运行NH查询。构建一个定制的log4net appender来捕获SQL并将其存储在一个变量中。现在您可以将其与查询相关联。那么你就有了

RunQueryAndCaptureSql(session.CreateQuery("from Stuff s where s.Thing = 'dude'"));
哪些块等待appender追加SQL,然后返回该SQL。非常不雅观,您必须确保处理线程问题,但它应该有效


坦白地说,我可能只是破解NH源代码。

自定义驱动程序
通过实现
NHibernate.driver.IDriver
,构建一个调用C层的驱动程序

SQLite驱动程序是一个很好的起点,因为它是一个C库。您的IDriver将与SQLiteDriver几乎相同。NHibernate在这方面很有用

您的C库还需要一个IDbConnection包装器。在SQLite包装器中,有最小的源代码,应该会有帮助

Odbc

NHibenate已经有了一个用于ODBC连接的驱动程序,
NHibernate.driver.OdbcDriver

在我们公司,C语言中有一个用于数据库访问的层。所有开发人员(.NET、Java、Cobol和Delphi)都必须使用此层。现在我正在使用我自己的DAL,但我想使用NHibernate。这个C层是用来代替ADO.NET的吗?这个c层是MSSQL的ODBC实现。