NHibernate Interceptor Auditing Inserted Object Id

谁说胖子不能爱 提交于 2019-11-30 10:09:27
TonE

I've worked around this problem by adding a list to my interceptor class which is populated with objects during the OnSave implementation.

In the PostFlush implementation the list is iterated over and each element is audited as an insert. The objects in this list have been persisted in PostFlush() and thus have generated IDs.

This seems to work OK but I'd be grateful if any potential pitfalls were pointed out :-)

public class AuditInterceptor : EmptyInterceptor
{       
    // To hold inserted items to be audited after insert has been flushed
    private IList<object> insertItems = new List<object>();

    public override void PostFlush(System.Collections.ICollection entities)
    {            
        foreach (var entity in insertItems)
        {
            AddAuditItem(entity, INSERT);
        }
        insertItems.Clear();

        base.PostFlush(entities);
    }

    public override bool OnSave(object entity, object id, object[] state, 
        string[] propertyNames, IType[] types)
    {            
        var auditable = entity as IAuditable;
        if (auditable != null) 
            insertItems.Add(entity);

        return false;            
    }
}

try the OnFlushDirty method.. or maybe PostFlush

edit: also, can you post your code? Don't you get the Id as a parameter to OnSave?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!