使用NHibernate在数据库中记录操作

时间:2013-10-08 12:16:33

标签: c# .net nhibernate autofac

我需要一个解决方案来记录并保存系统中的数据库用户操作,我需要记录用户,实体,先前状态和实体的当前状态以及用户进行更改的日期。我正在使用NHibernate,Autofac和.net 4.0 c#。我想创建一个属性过滤器并放入需要生成日志的方法,但也有使用Autofac创建的拦截器,但仍然无法想到最佳解决方案,我真的需要帮助,因为他们仍然没有实现任何东西像

2 个答案:

答案 0 :(得分:2)

你可以在Nhibernate中使用一些Listeners。它的工作方式类似于数据库中的触发器,但在ORM级别。对于示例,在PreUpdate方法上,您可以采用旧状态和ORM正在更改的对象的新状态并跟踪某些日志。如果您有用户登录您的AppDomain,您可以从IPrincipal对象获取此信息。您必须从IPreUpdateEventListenerIPreInsertEventListener等接口继承,并在类中实现这些接口的某些方法。之后,配置您的SessionFactory以使用这些侦听器。你可以在这里看到很多listerners。

查看以下链接:

http://darrell.mozingo.net/2009/08/31/auditing-with-nhibernate-listeners/

http://ayende.com/blog/3987/nhibernate-ipreupdateeventlistener-ipreinserteventlistener

http://nhibernate.info/doc/howto/various/creating-an-audit-log-using-nhibernate-events.html

PS:当你设置一个监听器时,它将适用于每个实体,不要忘记检查你想要添加这种行为的类型。

答案 1 :(得分:2)

要审核数据库更改,我可以推荐NHibernate.Envers。我在以前的项目中使用过它,效果很好。

NHibernate.Envers