如何在NHibernate中跟踪查询的原因/堆栈跟踪

时间:2012-09-04 07:37:53

标签: asp.net nhibernate log4net

我有一个页面,我发出一些查询,并使用 log4net 记录所有查询:

<appender name="NHibernateAppenderSQL" type="log4net.Appender.RollingFileAppender">
<file value="c:\dev\log\nhibernate-sql.log" />
<appendToFile value="true" />
<maximumFileSize value="10MB" />
<maxSizeRollBackups value="2" />

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date %level %thread %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
  <acceptOnMatch value="true" />
  <levelMin value="DEBUG" />
  <levelMax value="FATAL" />
</filter>

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>

因此,我可以看到在页面生命周期内发出的所有查询( ASP .NET Web窗体)。我发现由于某些原因,NHibernate通过id向我的一个表发出了大约10个查询。我想通过预加载数据来提高性能。但是,我无法确定触发这些查询的位置。

我知道NHibernate Profiler可以让我放心,但我没有在工作中使用它的许可。有没有其他方法可以找出这些查询的原因。我还分析了映射文件但没有任何成功。

1 个答案:

答案 0 :(得分:1)

编辑:我假设您正在使用MVC ......它似乎适用于普通的旧ASP.NET

我使用Mini Profiler来查找慢点并提高我的网站效果。它是StackOverflow创建的框架。它为您提供查询,并通过添加步骤,您可以确定谁在调用它。

它还与nHibernate集成以显示已执行的sql,以及每个页面渲染在sql中花费的时间。