How do I view the SQL that is generated by nHibernate?

前端 未结 9 2083
Happy的楠姐
Happy的楠姐 2020-12-03 00:41

How do I view the SQL that is generated by nHibernate? version 1.2

相关标签:
9条回答
  • 2020-12-03 01:33

    In the configuration settings, set the "show_sql" property to true. This will cause the SQL to be output in NHibernate's logfiles courtesy of log4net.

    0 讨论(0)
  • 2020-12-03 01:34

    You can also try NHibernate Profiler (30 day trial if nothing else). This tool is the best around IMHO.

    This will not only show the SQL generated but also warnings/suggestions/etc

    0 讨论(0)
  • 2020-12-03 01:35

    I am a bit late I know, but this does the trick and it is tool/db/framework independent. Instead of those valid options, I use NH Interceptors.

    At first, implement a class which extends NHibernate.EmptyInterceptor and implements NHibernate.IInterceptor:

    using NHibernate;
    
    namespace WebApplication2.Infrastructure
    {
        public class SQLDebugOutput : EmptyInterceptor, IInterceptor
        {
            public override NHibernate.SqlCommand.SqlString
               OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
            {
                System.Diagnostics.Debug.WriteLine("NH: " + sql);
    
                return base.OnPrepareStatement(sql);
            }
        }
    }
    

    Then, just pass an instance when you open your session. Be sure to do it only when in DEBUG:

    public static void OpenSession() {
    
    #if DEBUG
        HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession(new SQLDebugOutput());
    
    #else
        HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession();
                
    #endif
    }
    

    And that's it.

    From now on, your sql commands like these...

     var totalPostsCount = Database.Session.Query<Post>().Count();
     
     var currentPostPage = Database.Session.Query<Post>()
            .OrderByDescending(c => c.CreatedAt)
            .Skip((page - 1) * PostsPerPage)
            .Take(PostsPerPage)
            .ToList();
    

    .. are shown straight in your Output window:

    NH: select cast(count(*) as INT) as col_0_0_ from posts post0_

    NH:select post0_.Id as Id3_, post0_.user_id as user2_3_, post0_.Title as Title3_, post0_.Slug as Slug3_, post0_.Content as Content3_, post0_.created_at as created6_3_, post0_.updated_at as updated7_3_, post0_.deleted_at as deleted8_3_ from posts post0_ order by post0_.created_at desc limit ? offset ?

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