【问题标题】:Audit log to duplicated table with nhibernate使用 nhibernate 将日志审计到重复表
【发布时间】:2012-08-17 15:34:09
【问题描述】:

我们有一个使用 NHibernate 作为 ORM 的 Web 应用程序,现在我们需要对一些实体添加审计以跟踪谁更改了哪些内容。但是,我还没有想出最好和最简单的方法来处理它。

如果可能,我希望将审计信息放入每个实体的单独表中,如下所示(伪 sql):

create table MethodStatus (MethodId, Enabled)
create table MethodStatusAudit (MethodId, Enabled, AdminId, Date, ChangeType(U,D,I))

问题是如何使用 (Fluent)NHibernate 进行设置,使其易于管理?

我最初的想法是使用 IPreInsertEventListener / IPreUpdateEventListener / IPreDeleteEventListener 并让我的可审计对象实现 IAuditable 接口,然后做一些事情。但我不知道如何保存审计..

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? 
}

【问题讨论】:

  • 这是在数据库中使用触发器更容易完成的事情。这不适合你吗?
  • 可以从@event 获取会话对象。你能用它保存你的新对象吗?
  • @DanielHilgarth 实际上我首先创建了一个基于触发器的解决方案,但我们更愿意在 c# 代码中保留它。当其他一切都在 C# 代码中时,触发器解决方案将对开发人员非常“隐藏”。这也会产生一些问题,因为我们需要发送数据库以某种方式不知道的 adminId,以便可以将其插入到审计表中。

标签: c# nhibernate fluent-nhibernate audit


【解决方案1】:

NHibernate Envers 可以帮助您。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2018-04-26
    • 2018-01-25
    • 2012-09-16
    • 2015-11-26
    • 2020-08-09
    • 2012-08-31
    • 2011-10-24
    相关资源
    最近更新 更多