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

  • 相关阅读:
    第3章 管道符、重定向与环境变量
    基于Linux命令行KVM虚拟机的安装配置与基本使用
    Linux系统真正的优势以及学习方法
    一款在线编写接口文档的工具
    springboot前端传参date类型后台处理方式
    软件工程专业需要知道的缩写和专业名词
    七牛云图床及MPIC工具使用
    阿里云ECS云服务器CentOS部署个人网站
    【字】biang
    【车】打开车窗技巧
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/3652080.html
Copyright © 2011-2022 走看看