How to know query generated by Fluent NHibernate

后端 未结 8 1363
萌比男神i
萌比男神i 2020-12-30 00:07

I am using linq to Nhibernate to fire some select query to data base.

My question is, how do I know, the query generated by Fluent NHibernate?

相关标签:
8条回答
  • 2020-12-30 00:24

    With Fluent NHibernate, you can turn on show_sql like this:

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

    NHibernate will now print every sql statement to Console.Out.

    0 讨论(0)
  • 2020-12-30 00:25

    See this. What you need is hibernate.show_sql.

    0 讨论(0)
  • 2020-12-30 00:26

    You can use sql profilers like this one too.

    0 讨论(0)
  • 2020-12-30 00:35

    I have found 4 options to know sql query in nhibernate and fluent nhibernate.

    1. Log - Joey V. said in answer of this same question.
    2. ShowSql - Kevin Berridge said in answer of this same question.
    3. NHProf - This is a awesome profiler. NHProf
    4. Intercepter - It is really good to see sql. we can put it in our Output of Visual Studio and even in log file.

      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;
          }
       }
      
    0 讨论(0)
  • 2020-12-30 00:38

    If you want the SQL to be in log4net, make sure you set the logger in your configuration section.

    I put the NHibernate package at "INFO" to reduce the noise and the NHibernate.SQL to all so I can log all SQL statements.

      
     <logger name="NHibernate">
       <level value="INFO" />
     </logger>
    
    
      <logger name="NHibernate.SQL">
        <level value="ALL" />
      </logger>
    
    
    0 讨论(0)
  • 2020-12-30 00:40

    You might also find this useful http://nhprof.com/

    0 讨论(0)
提交回复
热议问题