有没有连接到数据库使用NHibernate的方法?

问题描述:

我需要Nhibernate只生成纯SQL,我将发送给我的C函数。有没有连接到数据库使用NHibernate的方法?

+0

你为什么要这样做? – 2010-02-26 18:25:40

+0

在我们公司里有一个用于数据库访问的C层。所有的开发人员(.NET,Java,Cobol和Delphi)都必须使用这一层。现在我正在使用我自己的DAL,但我想使用NHibernate。 – 2010-03-01 08:26:26

+0

这个C层用于代替ADO.NET吗?或者它适合哪里? – 2010-03-03 12:21:39

定制驱动
构建调用通过实施NHibernate.Driver.IDriver你的C层驱动程序。

SQLite驱动程序是一个很好的开始,因为它是一个C库。您的IDriver将与SQLiteDriver几乎相同。 NHibernate source code将对此有用。

您还需要一个用于C库的IDbConnection包装器。在SQLite包装中,csharp-sqlite拥有最小的来源,它应该是有帮助的。

ODBC
NHibenate已经有ODBC连接,NHibernate.Driver.OdbcDriver驱动程序。

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

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

RunQueryAndCaptureSql(session.CreateQuery("from Stuff s where s.Thing = 'dude'")); 

哪些块等待附加器附加的SQL,然后返回。不经意的地狱,你必须确保你处理线程问题,但它应该工作。

坦率地说,我可能只是破解NH源。