Hi,

I am implementing OnPreUpdate() and am inserting a new object in there
(for the purpose of a simple commit/rollback system).

When I call Save() on my original entity, I want to intercept, insert
a new copied entity (one without IDs so that it will get INSERTED and
not updated) - and finally, I want the original entity to NOT CHANGE.

I saw the veto functionality based on the return value of the
OnPreUpdate(), but this is saving the original entity and vetoing my
new entity - this is the OPPOSITE of what I want.

Any ideas of how veto the original entity and also insert the new
entity?

Thanks for any ideas/help!

Here is the code:

public class AuditEventListener : IPreUpdateEventListener
    {
        public bool OnPreUpdate(PreUpdateEvent e)
        {
            object entity = e.Entity;
            Type entityType = e.Entity.GetType();
            if (entity is IAuditableEntity)
            {
                IAuditableEntity auditableEntity =
(IAuditableEntity)entity;
                auditableEntity.Audit = new Audit();

                Type copyType = typeof(IAuditableCopy<>);
                Type[] types = new Type[] { entityType };
                Type genericCopyType =
copyType.MakeGenericType(types);

                if (genericCopyType.IsInstanceOfType(entity))
                {
                    MethodInfo castMethod =
entityType.GetMethod("AuditableCopy");
                    object newEntity = castMethod.Invoke(entity, new
object[]{});

                    using (ISession s =
e.Session.GetSession(EntityMode.Poco))
                    {
                        s.Save(newEntity);
                        s.Flush();  ///////////// NOT GETTING INSERTED
                    }
                }
            }
            return true; //////// ORIGINAL ENTITY STILL GETS UPDATED
        }
    }

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to