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

本文关键字:NHibernate 记录 操作 数据库 | 更新日期: 2023-09-27 18:34:28

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

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

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

查看以下链接:

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:当您设置侦听器时,它将适用于每个实体,不要忘记检查要添加此行为的类型。

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

NHibernate.Envers