我正在使用 linq to Nhibernate 向数据库发起一些选择查询。

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

有帮助吗?

解决方案

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

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

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


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

其他提示

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

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

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

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

我在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;
        }
     }
    

请参阅。你需要的是 hibernate.show_sql

你也可以使用像这个的sql profilers。

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

你也可以挂钩log4net。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top