如何知道Fluent NHibernate生成的查询

时间:2009-05-04 06:54:36

标签: sql nhibernate logging output

我正在使用linq来向Nhibernate发送一些选择查询到数据库。

我的问题是,我怎么知道,Fluent NHibernate生成的查询?

8 个答案:

答案 0 :(得分:35)

使用Fluent NHibernate,您可以像这样开启show_sql

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

NHibernate现在将每个sql语句打印到Console.Out

答案 1 :(得分:6)

您可能还会发现这个有用的http://nhprof.com/

答案 2 :(得分:5)

如果您希望SQL位于log4net中,请确保在配置部分设置记录器。

我将NHibernate包放在“INFO”以减少噪音,并将NHibernate.SQL放到所有位置以便我可以记录所有SQL语句。

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


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

答案 3 :(得分:2)

this。你需要的是hibernate.show_sql

答案 4 :(得分:2)

我在nhibernate和fluent nhibernate中找到了4个知道sql查询的选项。

  1. 日志 - 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;
        }
     }
    

答案 5 :(得分:0)

你也可以使用像this one这样的sql profilers。

答案 6 :(得分:0)

绝对购买并使用NHProf。这是一个很棒的产品,不仅可以向您显示正在运行的查询,还可以向您显示NHibernate映射和查询的任何潜在性能问题。

答案 7 :(得分:-1)

你也可以挂钩log4net。