2011-07-11 13 views
0

私はCastle ActiveRecordを生成して、生成するSQLを表示しようとしています。私がこれで見つけたさまざまなブログには、2つの選択肢があります。城ActiveRecord:SQLを見るのに最も簡単な方法は何ですか?

(1)NHibernateの「show_sql」設定を使用してください。問題は、私はこのようなプログラム構成を使用しているということです。

var config = XmlConfigurationSource.Build(
    DatabaseType.MsSqlServer2008, Settings.Default.StationManagerDbConnectionString); 
config.IsRunningInWebApp = isRunningInWebApp; 
config.PluralizeTableNames = true; 
var modelAssembly = Assembly.GetAssembly(typeof(OneOfMyClasses)); 
ActiveRecordStarter.Initialize(modelAssembly, config); 

プログラム構成では、「show_sql」を指定する方法がないようです。

(2)log4netを使用してください。しかし、log4netの痛みが働くことを除けば、私はのSQLをのSQLにする方法を見つけられませんでした。私はデバッグデータのゴブとゴブを取得します。そのうちのSQL文はほんの一部です。

So:私はCastle ActiveRecordのプログラム構成を維持することはできますが、SQLだけを出力するようにNHibernateを取得する方法はありますか?

EDIT:ここで私はlog4netで作業する必要があります。しかし、私のWebアプリケーションの最初の2ページでは、デバッグウィンドウに14,000行以上が表示されます。このコードを変更してSQLのみを取得するにはどうすればよいですか?

var appender = new log4net.Appender.DebugAppender 
{ 
    Layout = new log4net.Layout.SimpleLayout(), 
    Name = "NHibernate.SQL", 
    Threshold = log4net.Core.Level.Debug 
}; 
log4net.Config.BasicConfigurator.Configure(appender); 

答えて

1

NHibernate.SQLロガーを使用すると、SQLを分けることができるはずです。ロガーを使用してください。

例の設定:

<log4net> 
<!-- This is a default logger that nhibernate uses to push out all the SQL statements to--> 
<logger name="NHibernate.SQL" additivity="false"> 
    <level value="DEBUG"/> 
    <appender-ref ref="NHibernateSQLLog"/> 
</logger> 

<!-- This is a default logger that nhibernate uses to push out all the debugging type information to--> 
<logger name="NHibernate" additivity="false"> 
    <level value="DEBUG"/> 
    <appender-ref ref="NHibernateFileLog"/> 
</logger> 

<appender name="NHibernateFileLog" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs/nhibernate.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 

<appender name="NHibernateSQLLog" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs/nhibernate_sql.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 
</log4net> 

編集:

var filter = new log4net.Filter.LoggerMatchFilter(); 
filter.LoggerToMatch = "NHibernate.SQL"; 
filter.AcceptOnMatch = true; 

var filterDeny = new log4net.Filter.DenyAllFilter(); 

var appender = new log4net.Appender.DebugAppender 
{ 
    Layout = new log4net.Layout.SimpleLayout(), 
    Name = "NHibernate.SQL", 
    Threshold = log4net.Core.Level.Debug 
}; 

appender.AddFilter(filter); 
appender.AddFilter(filterDeny); 
log4net.Config.BasicConfigurator.Configure(appender); 
+0

私の編集を参照してください。私は単にSQLを出力するために使用しているlog4net構成コードを変更する簡単な方法はありますか? –

+0

@Kyralessa、私の編集を見てください。このコードはテストされていませんが、動作するはずです。 –

+0

聖なる煙、それは動作します!あなたは天才です! –

0

タスクの最も良いツールは、NHibernate Profiler(http://nhprof.com/)です。 商用アプリケーションですが、30日間無料トライアルを受けることができます。

+0

OKは、ちょうどにやにや笑いのために、私はそれを試してみました。それは私に30日間のトライアルに登録するように頼みます。だから、私は自分の名前と電子メールアドレスを入れ、「試用開始」を押す。数秒間新しい空のウィンドウが表示され、明らかな理由でシャットダウンされます。私を色づけしません。 –

+0

あなたはNHと集中して仕事をするときにも、これはまだインストールプロセスには何の問題もありませんでしたが、これはまだトレードの最も重要なツールの1つです。 – Variant

+0

それから私がそれを走らせたとき、始める明白な方法はなかった。その後、NHProfサイトで*その*を見つけた後、私のアプリを走らせて、NHProfはちょうど騒がしくなってしまいました。私は最終的にタスクを終了しなければなりませんでした。あたかも本当に便利だと思われますが、すぐに使える使いやすさはいくらか改善されています。 –

関連する問題