Sql 如何知道Fluent NHibernate生成的查询

Sql 如何知道Fluent NHibernate生成的查询,sql,nhibernate,logging,output,Sql,Nhibernate,Logging,Output,我正在使用linq to Nhibernate向数据库发出一些select查询 我的问题是,我如何知道Fluent NHibernate生成的查询?请参阅。您需要的是hibernate.show\u sql使用Fluent NHibernate,您可以像这样打开show\u sql: Fluently.Configure() .Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )... NHib

我正在使用linq to Nhibernate向数据库发出一些select查询


我的问题是,我如何知道Fluent NHibernate生成的查询?

请参阅。您需要的是
hibernate.show\u sql

使用Fluent NHibernate,您可以像这样打开
show\u sql

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

NHibernate现在将把每个sql语句打印到
控制台。Out

您可能也会发现这很有用您也可以像这样使用sql分析器。

您还可以挂接log4net

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

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

<logger name="NHibernate"> <level value="INFO" /> </logger> <logger name="NHibernate.SQL"> <level value="ALL" /> </logger>
一定要购买和使用。这是一款非常棒的产品,不仅向您展示了正在运行的查询,还向您展示了NHibernate映射和查询的任何潜在性能问题。

我在NHibernate和fluent NHibernate中找到了4个了解sql查询的选项

  • Log-Joey V.在回答同样的问题时说
  • ShowSql-kevinberridge在回答同样的问题时说
  • NHProf-这是一个很棒的剖析器
  • 拦截器-看到sql真的很好。我们可以把它放在VisualStudio的输出中,甚至放在日志文件中

    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;
        }
     }
    
    ISessionFactory sf=Fluently.Configure()
    .Database(MySQLConfiguration.Standard.ConnectionString(ConnectionString.ShowSql())
    .Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
    .ExposeConfiguration(c=>c.SetInterceptor(新的ABCInterceptor()))
    .BuildSessionFactory();
    公共类ABCInterceptor:EmptyInterceptor
    {
    在PrepareStatement上公共重写NHibernate.SqlCommand.SqlString(NHibernate.SqlCommand.SqlString sql)
    {
    Trace.WriteLine(sql.ToString());
    返回sql;
    }
    }
    

  • 你是如何配置Fluent NHibernate的?嗨,凯文,谢谢你发布这个!我想知道您是否也连接了Log4Net,以便它将生成的SQL发送到一个文件?这太令人沮丧了。你知道为什么这行不通吗?我正在浏览我的控制台,但它不在那里。Fluent NHibernate不会生成任何查询。这是NHibernate产生的。我认为这个问题可能会帮助你:虽然这可能从理论上回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。