2011-07-11 40 views
0

我試圖讓Castle ActiveRecord向我展示它生成的SQL。我發現的各種博客提供了兩種選擇:Castle 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。我得到了調試數據的gobs和gobs,其中的SQL語句只是一小部分。

所以:有沒有一些方法可以讓我的編程配置Castle ActiveRecord,但也讓NHibernate輸出只是SQL?

編輯:這是我得到與log4net一起工作。但在我的Web應用程序的前兩頁中,這在調試窗口中吐出了超過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

你應該能夠通過利用記錄器來分離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密切合作時,這仍然是交易中最重要的工具之一。 – Variant

+0

然後,當我跑了它,沒有明顯的方式開始。然後,當我在NHProf網站上發現*時,我運行了我的應用程序,NHProf保持攪動並鎖定。我終於必須結束任務。看起來好像它真的很有用,但是現成的可用性可以使用一些改進。 –

相關問題