我使用一个简单的拦截器拦截nhibernate生成的sql字符串用于登录目的,它工作正常.
public class SessionManagerSQLInterceptor : EmptyInterceptor, IInterceptor
{
NHibernate.SqlCommand.SqlString IInterceptor.OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
NHSessionManager.Instance.NHibernateSQL = sql.ToString();
return sql;
}
}
Run Code Online (Sandbox Code Playgroud)
但是这会捕获没有参数值的sql语句.它们被'?'取代
例如:....在哪里USER0_.USERNAME =?
到目前为止,我发现的唯一替代方法是使用log4nets nhibernate.sql appender,它记录包含参数值的sql语句,但这并不能很好地为我服务.
我需要使用一个拦截器,以便例如.当我捕获异常时,我想记录导致持久性问题的特定sql语句,包括它包含的值并记录邮件等等.与进入查找导致问题的查询的日志文件相比,这会加速调试..
我怎样才能获得完整的sql语句,包括nhibernate在运行时生成的参数值?