NHibernate輸出SQL語句


  用了NHierbate之后,很少需要寫原生的SQL語句,由於總是看不到SQL語句,所以有時候對SQL調優非常不利。因此產生了讓NHibernate輸出它所生成的SQL語句的想法,以便於后續調優。

一、在控制台輸出SQL語句

  在控制台程序中,要查看NHibernate所生成的SQL語句,方法非常簡單,只需要改下配置文件就OK了。

<property name="show_sql">true</property>
<property name="format_sql">true</property>

  第一個參數用於配置是否輸出SQL語句到控制台。

  第二個參數用於輸出的SQL語句是否格式化以便於查看。

  只設置第一個與兩個都設置的差別如下:

  只顯示不格式化:

1.png

  格式化后:

2.png

  上面的方法是配置控制台顯示的,如果不在控制台里執行,是Web程序呢。

二、Web程序輸出SQL語句到“調試窗口”

  Web程序輸出的方式也不難。

  第一步:寫一個類,繼承自EmptyInterceptor並重寫OnPrepareStatement方法。

public class SQLWatcher : EmptyInterceptor
{
    public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
    {
        System.Diagnostics.Debug.WriteLine("sql語句:" + sql);
        return base.OnPrepareStatement(sql);
    }
}

  第二步:在創建OpenSession的時候,用此類的對象作為參數傳入

ISession session = sessionFactory.OpenSession(new SQLWatcher());

  效果如下:

  3.png

  參考:http://www.mashangpiao.net/Article/Content/53


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM