2

私の知る限り、NHibernate によって生成された SQL スクリプトを読み取る方法は 3 つあります。 1. log4net 2. SQL プロファイラー 3. show_sql = true

ここでは、Visual Studio の出力ウィンドウで sql を読み取ることができると言われている 3 番目についてお話したいと思います。でも、何をしても何も見えない!?

「show_sql = true」は単に「Console.WriteLine()」を意味すると誰かが言ったので、ここに質問を投稿します。

欲しいものが得られないと言わざるを得ないので、ここで質問を要約します。Web アプリケーションの出力ウィンドウで:

  1. 「Console.WriteLine()」の結果を表示できますか?
  2. 「show_sql = true」でSQLスクリプトを表示できますか?

はいの場合、どのように?

4

1 に答える 1

2

Visual Studio がクラス ライブラリまたは Web サイト プロジェクトのコンソール出力を表示するとは思わない。私がやっていることは、NHibernate の SQL をテキスト ファイルに書き込むように log4net を構成し、そのファイルを 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 はファイルをリロードします。Web サイトまたはアプリケーションをデプロイするときは、必ずこれをオフにしてください。

于 2011-11-23T19:45:33.380 に答える