zoukankan      html  css  js  c++  java
  • 使用NHibernate(4)--拦截器和事件

    如果想在一个事务的开始、执行中、完成后等过程中执行一些自己的逻辑(比如记录日志、查看sql),拦截器(Interceptors)和事件(Event)就可以发挥作用了。两者所能完成的功能差不多。

    1,拦截器(Interceptors)

    要实现拦截器,则必须实现IInterceptor接口,这个接口在NHibernate源码的src/目录下,不同的方法在不同的时机被调用。clipboard

    如果仅仅需要用到接口中的一个方法,就必须得实现接口的所有方法,无疑是很坑爹的,所以NHibernate为我们实现了一个空的EmptyInterceptor。在自己的Interceptor类继承了EmptyInterceptor之后,只需要重写相应的方法就可以了。

    下面实现一个用于监控生成的sql的拦截器。

    首先添加一个拦截器类:

        class SqlMonitorInterceptor : EmptyInterceptor

        {

            public override global::NHibernate.SqlCommand.SqlString OnPrepareStatement(global::NHibernate.SqlCommand.SqlString sql)

            {

                //记录日志、输出到输出窗口。。。。

                return base.OnPrepareStatement(sql);

            }

        }

    在打开Session的时候,指定SqlMonitorInterceptor 为拦截器,比如:

    var session = sessionFactory.OpenSession(new DebugInterceptor());

    此时,运行代码,在SqlMonitorInterceptor 中加个断点,即可看到sql。

    2,事件(Events)

    在NHibernate源代码的src/Events目录下,有一些以Listener结尾的接口,想要监听哪个事件,只需要实现相应的接口,并且把实现类添加到Configuration的EventListeners中。

    比如:

    configuration.EventListeners.PostDeleteEventListeners = new IPostDeleteEventListener[] { new AuditDeleteEvent() };

  • 相关阅读:
    使用了Theme但是没有效果问题
    4.0 流量控制preference
    android sdk国内目录http://mirrors.neusoft.edu.cn/android/repository/
    xmpp push篇一 广播消息
    cursorfilter
    android 特效UI实现
    Android四大组件一----Activity
    net user命令
    sql2005如何附加数据库
    sql2005中如何启用SA账号
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/3652080.html
Copyright © 2011-2022 走看看