2

据我所知,读取NHibernate生成的sql脚本有3种方式: 1. log4net 2. sql profiler 3. show_sql = true

这里我只想谈谈第三个,因为据说我可以在 Visual Studio 的输出窗口中读取 sql。但无论我做什么,我什么都看不见?!

因为有人说“show_sql = true”只是意味着“Console.WriteLine()”,所以我在这里发布一个问题。

我不得不说我没有得到我想要的,所以在这里我总结一下我的问题:在 Web 应用程序的输出窗口中:

  1. 可以显示“Console.WriteLine()”的结果吗?
  2. "show_sql=true" 可以显示sql脚本吗?

如果是,如何?

4

1 回答 1

2

我认为 Visual Studio 不会显示类库或网站项目的控制台输出。我所做的是配置 log4net 将 NHibernate 的 SQL 写入文本文件,然后在 Visual Studio 中打开该文件。通过正确的配置,VS 将通过单击窗口来显示文件的更新。

在您的 Web.config(或 app.config)中,定义 log4net 部分,让 NHibernate 很好地格式化 SQL,创建一个文本文件附加程序,并将 NHibernate 消息定向到那里:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="format_sql">true</property>
    </session-factory>
  </hibernate-configuration>

  <log4net>
    <appender name="NHibernateLogFile" type="log4net.Appender.FileAppender">
      <file value="../Logs/NHibernate.log" />
      <appendToFile value="false" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{HH:mm:ss.fff}%m%n==========%n" />
      </layout>
    </appender>

    <logger name="NHibernate" additivity="false">
      <level value="WARN" />
      <appender-ref ref="NHibernateLogFile" />
    </logger>
    <logger name="NHibernate.SQL" additivity="false">
      <level value="DEBUG" />
      <appender-ref ref="NHibernateLogFile" />
    </logger>
  </log4net>
</configuration>

然后在 Visual Studio 中打开 NHibernate.Log。由于上面的 MinimalLock,Visual Studio 可以在 log4net 写入文件的同时读取文件。当您在窗口中单击时,VS 将重新加载文件。只需确保在部署网站或应用程序时将其关闭。

于 2011-11-23T19:45:33.380 回答