2009-05-04 58 views
19

我正在使用linq到Nhibernate来激发一些选择查询到数据库。如何知道由流利NHibernate生成的查询

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

+3

功能NHibernate **不**产生任何疑问。它是NHibernate生成它们的。 – 2010-06-17 15:24:32

+0

我认为这个问题可能会对你有所帮助:http://stackoverflow.com/questions/474659/how-to-log-sql-calls-with-nhibernate-to-the-console-of-visual-studio – HerbalMart 2012-11-14 16:24:46

回答

5

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

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

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


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

2

参见this。你需要的是hibernate.show_sql

+0

谢谢.. ............. – 2009-05-06 05:50:16

35

用流利的NHibernate的,你可以打开show_sql这样的:

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

的NHibernate现在将打印每一个SQL语句来Console.Out

-1

你也可以在log4net中挂钩。

0

肯定购买和使用NHProf。这是一款非常棒的产品,不仅向您展示正在运行的查询,还向您展示了NHibernate映射和查询的任何潜在性能问题。

2

我发现有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; 
        } 
    }