• NHibernate 查看生成的sql语句


      今天比较郁闷,想修改下NHibernate配置文件以优化下性能,于是想跟踪下各个操作下产生的生成的sql      
    唉,我这么懒的人首先想到的就是在网上找下已有的方法,结果让人失望的很啊。网上能给出答案的还真没被我看到,
    都是些没思考过就乱回答的人,什么show_sql=“true”,我靠,这只能从控制台看到撒,吗的,现在还有几个应用是
    控制台应用啊?  
      于是就只能自己找方法了,终于,在我翻阅NHibernate 2.0还是2.1的源代码的时候让我找到了NHibernate对外的接口了
    泪奔啊,记录下来,与大家分享。其实就是Interceptor的应用,  源码中Interceptor的默认实现是EmptyInterceptor,下面列出
    该实现中我说的接口:

                 [Serializable]
    	public class EmptyInterceptor : IInterceptor
    	{
    
    		//前面省略n行代码
    		public SqlString OnPrepareStatement(SqlString sql)
    		{
    			return sql;
    		}
    	}
    
     public class MyInterceptor : EmptyInterceptor
        {
           public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
            {
                return base.OnPrepareStatement(sql);
            }
        }
    

    我们要做的就是继承EmptyInterceptor,重写OnPrepareStatement()方法,重写方法里面就是你大展拳脚的地方了,
    想写文件写文件,想输出到页面就输出到页面,什么都不做都可以,如上

    怎么用呢?

    代码
    public override void Update(Admin entity)
    {
    ISession session
    = HibernateTemplate.SessionFactory.OpenSession(new MyIntercepotr);
    session.Update(entity);
    session.Flush();
    }

    在你想要查看的操作中,打开session 的时候添加上自定义的拦截器就可以了,想给所有的操作都配置的话就要用到全局配置文件了。
    不过我一般都不会用。
          我这么懒的人什么都不做的,重写OnPrepareStatement()的时候一句话都不改,我只是在这里打一个断点而已,我只要看看生成的
    sql语句就行了,然后去修改配置文件再来debug,确认怎么配置生产的sql最优,^_^.


  • 相关阅读:
    验证 Email
    取系统时间
    DbHelperSQL.cs
    显示BYTE流图片
    [原]c# 读取文本文件(txt)
    数据库文件组和文件的作用
    Transact—SQL
    m_pMainWnd
    sql server 2005 window 身份证验证模式与SQL Server身份验证
    WM_CLOSE WM_DESTROY WM_QUIT
  • 原文地址:https://www.cnblogs.com/wangchangming/p/NHibernare_sql.html
Copyright © 2020-2023  润新知