相关疑难解决方法(0)

拦截包含NHibernate生成的参数值的SQL语句

我使用一个简单的拦截器拦截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在运行时生成的参数值?

.net c# nhibernate

20
推荐指数
2
解决办法
5186
查看次数

标签 统计

.net ×1

c# ×1

nhibernate ×1