我需要一个解决方案来记录并保存系统中的数据库用户操作,我需要记录用户,实体,先前状态和实体的当前状态以及用户进行更改的日期。我正在使用NHibernate,Autofac和.net 4.0 c#。我想创建一个属性过滤器并放入需要生成日志的方法,但也有使用Autofac创建的拦截器,但仍然无法想到最佳解决方案,我真的需要帮助,因为他们仍然没有实现任何东西像
答案 0 :(得分:2)
你可以在Nhibernate中使用一些Listeners
。它的工作方式类似于数据库中的触发器,但在ORM级别。对于示例,在PreUpdate
方法上,您可以采用旧状态和ORM正在更改的对象的新状态并跟踪某些日志。如果您有用户登录您的AppDomain,您可以从IPrincipal
对象获取此信息。您必须从IPreUpdateEventListener
和IPreInsertEventListener
等接口继承,并在类中实现这些接口的某些方法。之后,配置您的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。我在以前的项目中使用过它,效果很好。