如何知道Fluent NHibernate生成的查询

Rah*_*shi 20 sql nhibernate logging output

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

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

Kev*_*dge 36

使用Fluent NHibernate,您可以这样打开show_sql:

Fluently.Configure()
    .Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )...
Run Code Online (Sandbox Code Playgroud)

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

  • 这太令人沮丧了.知道为什么这不起作用?我正在浏览我的控制台,但它不在那里. (14认同)

Chr*_*nal 6

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


Joe*_* V. 5

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

我把NHibernate包放在"INFO"以减少噪音和N​​Hibernate.SQL,所以我可以记录所有的SQL语句.

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


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


Jug*_*hal 5

我找到了 4 个选项来了解 nhibernate 和 fluent 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;
        }
     }
    
    Run Code Online (Sandbox Code Playgroud)