当前位置:  开发笔记 > 编程语言 > 正文

记录NHibernate SQL查询

如何解决《记录NHibernateSQL查询》经验,为你挑选了2个好方法。

有没有办法在我的代码中访问完整的SQL查询,包括值?

我能够使用log4net记录SQL查询:


    
    

但是,我想找到一种从代码中记录SQL查询的方法.这样我将在try/catch语句中记录导致异常的特定SQL查询.

现在,我必须对SQLFileLog进行数据挖掘,以便在发生异常时找到导致异常的查询并且效率不高.



1> Mike Glenn..:

你可以使用拦截器来做到这一点:

public class LoggingInterceptor : EmptyInterceptor {
    public override SqlString OnPrepareStatement(SqlString sql) {

        Debug.WriteLine(sql);

        return sql;
    }
}

有关使用nhibernate注册它的不同方法,请参阅Nhibernate Docs.


有可能捕获参数值吗?

2> nicolay.anyk..:

你可以覆盖驱动程序:

public class LoggerSqlClientDriver:SqlClientDriver, IEmbeddedBatcherFactoryProvider
{      
    public override void AdjustCommand(IDbCommand command)
    {
        //log here
        base.AdjustCommand(command);
    }

    //protected override void OnBeforePrepare(IDbCommand command)
    //{
    //    //log here
    //    base.OnBeforePrepare(command);
    //}
}

然后在配置中使用它:

var config = Fluently.Configure().
            Database(MsSqlConfiguration.MsSql2005.Driver();

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有