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() };

  • 相关阅读:
    java 计算文件 md5值
    前端项目结构
    路由器下连接路由器教程
    idea 中抽取部分代码
    idea 多行注释 Ctrl shift / 失效问题
    idea Ctrl+shift+F 快捷键失效原因
    Android studio 安装 jrebel for Android 下载不了问题
    利用C#创建和安装一个windows服务
    25条提高Visual Studio编码和调试效率的技巧
    IIS解决 上传文件大小限制
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/3652080.html
Copyright © 2011-2022 走看看