我发现了一些关于在使用NHibernate 3.x时记录sql查询时遇到的困难的帖子 实际上我正在使用NHibernate 3.2,我无法让sql日志记录工作。 我只需要在测试或调试时在输出窗口中编写的简单日志记录功能。 它曾经在NH 2.2中工作,但是这个新版本出了问题。 正如this article所说,我只是用
配置了NHibernate<property name="show_sql">true</property>
我有这个简单的代码:
using (var session = PersistenceManager.Istance.GetSession()) {
var result = (from agenzia in session.Query<Agenzia>()
select agenzia).ToList();
return result;
}
但似乎没有从数据库中检索到任何内容。所以我不知道是否记录了任何内容(我在visual studio 2010下进行调试,所以我希望在输出窗口中看到一些内容),或者由于一些奇怪的原因,甚至没有任何内容被执行。 在任何地方都不例外,所以我有点困惑
编辑: 根据要求,这是NHibernate的完整配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<!-- NHibernate Configuration -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernate.xlns">
<property name="dialect">
NHibernate.Dialect.MsSql2000Dialect
</property>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
答案 0 :(得分:1)
标志show_sql,AFAIK登录 STDOUT ,因此它在单元测试或控制台应用程序中运行良好,但如果你的应用程序没有stdout(即winapp或web应用程序),它什么都不做在这种情况下,您应该在log4net配置中启用日志NHibernate.SQL
(或者在您可能使用的备用记录器中)。在Web应用程序中,您可以配置跟踪追加程序,以便在调试程序的跟踪窗口中查看已记录的查询。
答案 1 :(得分:0)
如果您使用的是log4net,那么要启用SQL日志记录,除了设置<property name="show_sql">true</property>
之外,还需要将级别设置为INFO或DEBUG(详细),如下所示:
<log4net>
...
<!-- Print only messages of level INFO or above in 'NHibernate' package -->
<logger name="NHibernate">
<level value="INFO" />
</logger>
</log4net>