2009-05-04 71 views
19

我正在使用linq到Nhibernate來激發一些選擇查詢到數據庫。如何知道由流利NHibernate生成的查詢

我的問題是,我怎麼知道,由Fluent NHibernate生成的查詢?

+3

功能NHibernate **不**產生任何疑問。它是NHibernate生成它們的。 – 2010-06-17 15:24:32

+0

我認爲這個問題可能會對你有所幫助:http://stackoverflow.com/questions/474659/how-to-log-sql-calls-with-nhibernate-to-the-console-of-visual-studio – HerbalMart 2012-11-14 16:24:46

回答

5

如果您希望SQL處於log4net中,請確保在您的配置部分中設置了記錄器。

我把NHibernate包放在「INFO」以減少噪音和N​​Hibernate.SQL到所有我可以記錄所有的SQL語句。

 
<logger name="NHibernate"> 
    <level value="INFO" /> 
</logger> 


    <logger name="NHibernate.SQL"> 
    <level value="ALL" /> 
    </logger> 

2

參見this。你需要的是hibernate.show_sql

+0

謝謝.. ............. – 2009-05-06 05:50:16

35

用流利的NHibernate的,你可以打開show_sql這樣的:

Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...))... 

的NHibernate現在將打印每一個SQL語句來Console.Out

-1

你也可以在log4net中掛鉤。

0

肯定購買和使用NHProf。這是一款非常棒的產品,不僅向您展示正在運行的查詢,還向您展示了NHibernate映射和查詢的任何潛在性能問題。

2

我發現有4個選項可以在nhibernate和流利的nhibernate中知道sql查詢。

  1. Log - Joey V.在回答同樣的問題時說。
  2. ShowSql - Kevin Berridge在回答這個問題時說。
  3. NHProf - 這是一個很棒的分析器。 NHProf
  4. Intercepter - 很高興看到sql。我們可以將它放入我們的Visual Studio輸出甚至日誌文件中。

    ISessionFactory sf = Fluently.Configure() 
         .Database(MySQLConfiguration.Standard.ConnectionString(ConnectionString).ShowSql()) 
         .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Stock>()) 
         .ExposeConfiguration(c => c.SetInterceptor(new ABCInterceptor())) 
         .BuildSessionFactory(); 
    
    
    public class ABCInterceptor : EmptyInterceptor 
    { 
        public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) 
        { 
         Trace.WriteLine(sql.ToString()); 
         return sql; 
        } 
    }