23

我正在使用 linq to Nhibernate 来触发一些对数据库的选择查询。

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

4

8 回答 8

37

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

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

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

于 2009-05-22T12:09:55.897 回答
6

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

于 2009-05-22T13:49:01.110 回答
6

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

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

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


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

于 2009-10-07T15:16:51.753 回答
6

我找到了 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;
        }
     }
    
于 2013-07-18T12:38:14.653 回答
2

看到这个。你需要的是hibernate.show_sql.

于 2009-05-04T06:56:45.653 回答
0

您也可以使用像这样的sql 分析器。

于 2009-05-22T13:51:34.523 回答
0

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

于 2009-10-16T06:11:26.380 回答
-1

你也可以挂在 log4net 中。

于 2009-05-22T18:46:25.230 回答