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

1,拦截器(Interceptors)

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

如果仅仅需要用到接口中的一个方法,就必须得实现接口的所有方法,无疑是很坑爹的,所以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() };

最新文章

  1. e.target.files[0]层层剖析
  2. OpenGL在Ubuntu 14.04 中的设置与编程
  3. Qt qml 模拟iphone slide to unlock 的聚光动画文字效果
  4. android-square-progressbar-legacy
  5. SequoiaDB 1.5 版本发布
  6. 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
  7. java String.split方法是用注意点(转)
  8. iOS UIKit:animation
  9. AbstractFactory 模式
  10. CentOS 漏洞修补
  11. 滚动 docker 中的 nginx 日志
  12. IT java培训机构名单(不全)
  13. redis知识点汇总
  14. CSAPP:第三章程序的机器级表示3
  15. POJ 3279 - Fliptile - [状压+暴力枚举]
  16. 一些java多线程的经验
  17. spark sql01
  18. Java知识汇总——思维导图
  19. MFC使用MsComm做串口通信
  20. python-appium520-2初步使用

热门文章

  1. Docker的安装,配置,更新和卸载
  2. 百度地图api描绘车辆历史轨迹图
  3. [翻译]Writing Custom Common Controls 编写自定义控件
  4. D3.js的基础部分之数组的处理 映射(v3版本)
  5. SQL Server创建表超出行最大限制解决方法
  6. ActiveX 控件重绘无效问题,用CClientDC 而不是CPaintDC
  7. PostgreSQL操作数据表
  8. .netcore Swagger 生成 api接口文档
  9. .Net生成导出Excel
  10. 【ocp-12c】最新Oracle OCP-071考试题库(45题)