C# 使用nhibernate将审核日志复制到重复表
我们有一个web应用程序,使用NHibernate作为ORM,现在我们需要在一些实体上添加审计,以跟踪谁改变了什么。然而,我还没有找到最好、最简单的处理方法 如果可能的话,我希望审计信息进入每个实体的一个单独的表中,类似这样(伪sql): 问题是如何使用(Fluent)NHibernate设置它,使其易于管理 我最初的想法是使用IPreInsertEventListener/IPreUpdateEventListener/IPreDeleteEventListener,让我的可审核对象实现IAAuditable接口,然后做一些事情。但是我想不出如何保存审计C# 使用nhibernate将审核日志复制到重复表,c#,nhibernate,fluent-nhibernate,audit,C#,Nhibernate,Fluent Nhibernate,Audit,我们有一个web应用程序,使用NHibernate作为ORM,现在我们需要在一些实体上添加审计,以跟踪谁改变了什么。然而,我还没有找到最好、最简单的处理方法 如果可能的话,我希望审计信息进入每个实体的一个单独的表中,类似这样(伪sql): 问题是如何使用(Fluent)NHibernate设置它,使其易于管理 我最初的想法是使用IPreInsertEventListener/IPreUpdateEventListener/IPreDeleteEventListener,让我的可审核对象实现IAA
public interface IAuditable {}
public class MethodStatus : IAuditable
{
public virtual int MethodId { get; set; }
public virtual bool Enabled { get; set; }
}
public class MethodStatusMap : ClassMap<MethodStatus>
{
public MethodStatusMap()
{
Id(x => x.MethodId);
Map(x => x.Enabled);
}
}
public bool OnPreInsert(PreInsertEvent @event)
{
var e = @event.Entity as IAuditable;
if (e != null)
//save audit.. but how?
}
公共接口IAuditable{}
公共类方法状态:IAuditable
{
公共虚拟int MethodId{get;set;}
启用公共虚拟bool的{get;set;}
}
公共类方法状态映射:类映射
{
公共方法状态映射()
{
Id(x=>x.MethodId);
映射(x=>x.Enabled);
}
}
公共bool OnPreInsert(PreInsertEvent@event)
{
var e=@event.Entity作为IAuditable;
如果(e!=null)
//保存审计..但如何保存?
}
可以帮助您实现这一点。在数据库中使用触发器更容易实现这一点。这不是您的一个选项吗?您可以从@event获取会话对象。你能用它保存你的新对象吗?@DanielHilgarth我实际上首先创建了一个基于触发器的解决方案,但我们更愿意在c代码中保持它。当其他一切都在C#代码中时,触发器解决方案将对开发人员非常“隐藏”。这也会产生一些问题,因为我们需要以某种方式发送数据库不知道的adminId,以便将其插入审计表中。
public interface IAuditable {}
public class MethodStatus : IAuditable
{
public virtual int MethodId { get; set; }
public virtual bool Enabled { get; set; }
}
public class MethodStatusMap : ClassMap<MethodStatus>
{
public MethodStatusMap()
{
Id(x => x.MethodId);
Map(x => x.Enabled);
}
}
public bool OnPreInsert(PreInsertEvent @event)
{
var e = @event.Entity as IAuditable;
if (e != null)
//save audit.. but how?
}