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

C# 在数据库中使用NHibernate记录操作,c#,.net,nhibernate,autofac,C#,.net,Nhibernate,Autofac,我需要一个在系统中记录和保存数据库用户操作的解决方案,我需要记录用户、实体、实体的先前状态和当前状态以及用户进行更改的日期。我使用的是NHibernate、Autofac和.NET4.0C。我曾想过创建一个属性过滤器,并加入需要生成日志的方法,但也有使用Autofac创建的拦截器,但仍然无法想出最佳解决方案,我真的需要帮助,因为他们仍然没有实现类似的任何功能。您可以在Nhibernate中使用一些侦听器。它就像数据库中的触发器一样工作,但在ORM级别。对于示例,在PreUpdate方法中,您可以

我需要一个在系统中记录和保存数据库用户操作的解决方案,我需要记录用户、实体、实体的先前状态和当前状态以及用户进行更改的日期。我使用的是NHibernate、Autofac和.NET4.0C。我曾想过创建一个属性过滤器,并加入需要生成日志的方法,但也有使用Autofac创建的拦截器,但仍然无法想出最佳解决方案,我真的需要帮助,因为他们仍然没有实现类似的任何功能。您可以在Nhibernate中使用一些
侦听器。它就像数据库中的触发器一样工作,但在ORM级别。对于示例,在
PreUpdate
方法中,您可以获取ORM正在更改的对象的旧状态和新状态,并跟踪一些日志。如果有用户登录到AppDomain,则可以从
IPrincipal
对象获取此信息。您必须继承像
IPreUpdateEventListener
IPreInsertEventListener
这样的接口,并在类中实现这些接口的某些方法。之后,配置
SessionFactory
以使用这些侦听器。这里有很多听众

请查看以下链接:


PS:设置侦听器时,它将适用于每个实体,不要忘记检查要添加此行为的类型。

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

请查看以下链接:


PS:设置侦听器时,它将适用于每个实体,不要忘记检查要添加此行为的类型。

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


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


谢谢!很好的解决方案,谢谢!很好的解决方案。