如何在Visual Studio中读取NHibernate生成的sql

时间:2011-11-23 14:46:06

标签: visual-studio-2010 console.writeline

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

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

有人说“show_sql = true”只是意味着“Console.WriteLine()”,所以我发布了一个问题here

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

  1. 可以显示“Console.WriteLine()”的结果吗?
  2. “show_sql = true”可以显示sql脚本吗?
  3. 如果是,怎么样?

1 个答案:

答案 0 :(得分:2)

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

在你的Web.config(或app.config)中,定义log4net部分,让NHibernate很好地格式化SQL,创建一个文本文件appender,并在那里指导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将重新加载该文件。请务必在部署网站或应用程序时将其关闭。