sql >> Databasteknik >  >> RDS >> Mysql

NHibernate IPreUpdateEventListener, IPreInsertEventListener sparas inte i DB

Svaret skulle döljas/avslöjas i detta citat från Ayendes artikel

Detta är koden som visar hur man, från samma artikel:

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

Och här är den magiska 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. Ställa in MySQL root-användarlösenordet på OS X

  2. Hur man får antalet dagar i en månad i MySQL

  3. UNIK begränsning, endast när ett fält innehåller ett specifikt värde

  4. Behöver fråga distinkt kombination av två fält, tillsammans med en räkning som distinkt kombination inträffar