Я использую простой перехватчик для перехвата строки sql, которую nhibernate генерирует для целей ведения журнала, и работает нормально.
public class SessionManagerSQLInterceptor : EmptyInterceptor, IInterceptor
{
NHibernate.SqlCommand.SqlString IInterceptor.OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
NHSessionManager.Instance.NHibernateSQL = sql.ToString();
return sql;
}
}
Это, однако, фиксирует инструкцию sql без значений параметров. Они заменяются на "?"
Например:.... WHERE USER0_.USERNAME =?
Единственным альтернативным подходом, который я нашел до сих пор, является использование log4nets nhibernate.sql appender, который регистрирует SQL-выражение, включая значения параметров, но это не служит мне хорошо.
Мне нужно использовать перехватчик, чтобы напр. когда я поймаю исключение, я хочу зарегистрировать конкретный оператор sql, который вызвал проблему с сохранением, включая содержащиеся в нем значения, и занести в журнал его почту и т.д. Это ускоряет отладочную работу по сравнению с входом в файлы журналов, которые ищут запрос, вызвавший проблему..
Как я могу получить полные инструкции sql, включая значения параметров, которые nhibernate генерирует во время выполнения?