Регистрация запросов NHibernate SQL - PullRequest
12 голосов
/ 04 февраля 2010

Есть ли способ получить доступ к полному запросу SQL, включая значения, внутри моего кода?

Я могу регистрировать запросы SQL, используя log4net:

<logger name="NHibernate.SQL" additivity="false">
    <level value="ALL"/>
    <appender-ref ref="NHibernateSQLFileLog"/>
</logger>

Однако я хотел бы найти способ также регистрировать запросы SQL из кода. Таким образом, я запишу определенный SQL-запрос, который вызывает исключение в моем операторе try / catch.

Прямо сейчас мне нужно провести анализ данных SQLFileLog, чтобы найти запрос, который вызвал исключение, когда возникает исключение, и оно неэффективно.

Ответы [ 4 ]

9 голосов
/ 20 мая 2010

вы можете использовать перехватчик, чтобы сделать это:

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

        Debug.WriteLine(sql);

        return sql;
    }
}

См. Nhibernate Docs , чтобы узнать, как зарегистрировать его в nhibernate.

6 голосов
/ 24 июля 2012

Вы можете переопределить драйвер:

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<LoggerSqlClientDriver>();
4 голосов
/ 12 февраля 2010

Либо используйте sql profiler, либо посмотрите nhprof на http://nhprof.com/

И то, и другое позволит вам увидеть вывод sql.

Также установите свойство show_sql в конфигурационном файле hibernate

<property name="show_sql">true</property>
1 голос
/ 01 апреля 2010

Используйте приложение log4net с определенной целью (если оно поддерживает включение / выключение) или просто расширьте его и включите его в рамках try-catch-finally-off.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...