sql >> データベース >  >> RDS >> Mysql

NHibernate IPreUpdateEventListener、IPreInsertEventListenerがDBに保存されない

    答えは、Ayendeの記事からのこの引用で隠されている/明らかにされます

    これは、同じ記事からの方法を示すコードです:

    public class AuditEventListener : IPreUpdateEventListener, IPreInsertEventListener
    {
        public bool OnPreUpdate(PreUpdateEvent @event)
        {
            var audit = @event.Entity as IHaveAuditInformation;
            if (audit == null)
                return false;
    
            var time = DateTime.Now;
            var name = WindowsIdentity.GetCurrent().Name;
    
            Set(@event.Persister, @event.State, "UpdatedAt", time);
            Set(@event.Persister, @event.State, "UpdatedBy", name);
    
            audit.UpdatedAt = time;
            audit.UpdatedBy = name;
    
            return false;
        }
    
        public bool OnPreInsert(PreInsertEvent @event)
        {
            var audit = @event.Entity as IHaveAuditInformation;
            if (audit == null)
                return false;
    
    
            var time = DateTime.Now;
            var name = WindowsIdentity.GetCurrent().Name;
    
            Set(@event.Persister, @event.State, "CreatedAt", time);
            Set(@event.Persister, @event.State, "UpdatedAt", time);
            Set(@event.Persister, @event.State, "CreatedBy", name);
            Set(@event.Persister, @event.State, "UpdatedBy", name);
    
            audit.CreatedAt = time;
            audit.CreatedBy = name;
            audit.UpdatedAt = time;
            audit.UpdatedBy = name;
    
            return false;
        }
    

    そして、これが魔法のSet()

    private void Set(IEntityPersister persister, object[] state
           , string propertyName, object value)
    {
        var index = Array.IndexOf(persister.PropertyNames, propertyName);
        if (index == -1)
            return;
        state[index] = value;
    }
    



    1. Netbeanに認証プラグイン「caching_sha2_password」をロードできません

    2. MariaDBでのCOMPRESS()のしくみ

    3. SQLでサブクエリを再利用する方法は?

    4. 日付を人間が読める形式にフォーマットする