I tried to override the PerformSave and PerformUpdate methods, but
they didn't work. and the entitystatus can't give me the infomation I
wanted, too.

On Tue, Jan 6, 2009 at 12:19 PM, Karron Qiu <[email protected]> wrote:
> Hi, is there any update? I have the same problem. I want to know if
> this is an update or a save operation in the
> SaveOrUpdateEventListener, too. Does anyone have ideas?
>
> On Mon, Oct 13, 2008 at 11:52 PM, Oz <[email protected]> wrote:
>>
>> Thanks Will.  I see what I can find and post anything interesting back
>> here for future reference.
>>
>> On Oct 13, 4:50 pm, "Will Shaver" <[email protected]> wrote:
>>> I haven't needed to do that, so I don't have a quick answer for you. At some
>>> level NH has to determine this, so see if you can figure out how this works.
>>>
>>> On Mon, Oct 13, 2008 at 1:56 AM, Oz <[email protected]> wrote:
>>>
>>> > Thanks for the response Will.
>>>
>>> > I see the problem now.  In your example, you attach the listener to
>>> > the Save event and also to the SaveOrUpdate event.
>>>
>>> > In my code I attach one listener to the Save event and another
>>> > listener to the Update event (NOTE - nothing attached to
>>> > SaveOrUpdate).  It seems that in this case the Save isn't called all
>>> > the way down the tree in the domain.
>>>
>>> > I tried changing my code to the same way as yours and it works,
>>> > however I need to have separate behaviours depending on whether a save
>>> > or update is happening.  Is there a way of determining if we're doing
>>> > a save or an update when the SaveOrUpdate event fires?
>>>
>>> > On Oct 10, 6:28 pm, "Will Shaver" <[email protected]> wrote:
>>> > > I just double-checked and I am getting my event listener to pick up
>>> > > both parent and children for my domain.
>>>
>>> > > Be sure you're overriding both:
>>>
>>> > > configuration.EventListeners.SaveEventListeners = new
>>> > > ISaveOrUpdateEventListener[] { listener };
>>> > > configuration.EventListeners.SaveOrUpdateEventListeners = new
>>> > > ISaveOrUpdateEventListener[] { listener };
>>>
>>> > > My collections are mapped with inverse="true" and cascade="all"
>>>
>>> >  > On Fri, Oct 10, 2008 at 10:10 AM, Oz <[email protected]> wrote:
>>>
>>> > > > Hi Will,
>>>
>>> > > > Consider this:
>>>
>>> > > > I have a class A which implements IAuditable, as discussed in my
>>> > > > original post, and class A holds a List collection of class B, which
>>> > > > also implements IAuditable.
>>>
>>> > > > When I save class A, the EventListener fires and I am able to set the
>>> > > > audit information on class A, similar to my original post, however the
>>> > > > EventListener doesn't then seem to fire when the save cascades down
>>> > > > into class B.
>>>
>>> > > > Do you have any ideas?
>>>
>>> > > > Thanks,
>>>
>>> > > > Mark
>>>
>>> > > > On 6 Oct, 16:06, "Will Shaver" <[email protected]> wrote:
>>> > > >> Could you set a "DeleteMe" column and have the triggers watch for 
>>> > > >> that
>>> > and
>>> > > >> then delete the row? The problem is that once you delete something
>>> > with NH,
>>> > > >> the entity is no longer persistant, so changes to it are not sent to
>>> > the db.
>>>
>>> > > >> On Mon, Oct 6, 2008 at 5:38 AM, Oz <[email protected]> wrote:
>>>
>>> > > >> > Dear NHUsers,
>>>
>>> > > >> > I read your Gabriel Schenker's soft deletes article (http://
>>>
>>> >www.nhforge.org/blogs/nhibernate/archive/2008/09/06/soft-deletes.aspx)
>>> > > >> > with great interest and it was very useful!  I have a similar but
>>> > > >> > slightly different requirement which I'm having some trouble
>>> > > >> > implementing, and I wonder if you're able to offer some advice?
>>>
>>> > > >> > I need to actually do a physical delete from a table, but to update
>>> > > >> > the "ModifiedDate" and "ModifiedBy" fields on the object BEFORE
>>> > > >> > deletion.  The reason I need to do this is that I have a trigger
>>> > that
>>> > > >> > will fire on deletions, and copy the row to a history table.  I'd
>>> > like
>>> > > >> > the row in the history table to reference the actual deletion time
>>> > and
>>> > > >> > have the name of the person who deleted it.
>>>
>>> > > >> > At the moment, the code I have is as follows, although I have tried
>>> > > >> > various different options.
>>>
>>> > > >> >        protected override void
>>> > > >> > DeleteEntity(NHibernate.Event.IEventSource session, object entity,
>>> > > >> >            NHibernate.Engine.EntityEntry entityEntry, bool
>>> > > >> > isCascadeDeleteEnabled,
>>> > > >> >            NHibernate.Persister.Entity.IEntityPersister persister,
>>> > > >> > Iesi.Collections.ISet transientEntities)
>>> > > >> >        {
>>> > > >> >            IAuditable auditable = entity as IAuditable;
>>>
>>> > > >> >            if (auditable != null)
>>> > > >> >            {
>>> > > >> >                auditable.ModifiedDate = DateTime.Now;
>>> > > >> >                auditable.ModifiedBy = "mark";
>>>
>>> > > >> >                CascadeBeforeDelete(session, persister, auditable,
>>> > > >> > entityEntry, transientEntities);
>>> > > >> >                base.DeleteEntity(session, auditable, entityEntry,
>>> > > >> > isCascadeDeleteEnabled, persister, transientEntities);
>>> > > >> >                CascadeAfterDelete(session, persister, auditable,
>>> > > >> > transientEntities);
>>> > > >> >            }
>>> > > >> >            else
>>> > > >> >            {
>>> > > >> >                base.DeleteEntity(session, entity, entityEntry,
>>> > > >> > isCascadeDeleteEnabled, persister, transientEntities);
>>> > > >> >            }
>>> > > >> >        }
>>>
>>> > > >> > The code above simply deletes the row, without propagating the
>>> > update
>>> > > >> > first.  I've also tried doing a session.Update(...) before the
>>> > > >> > CascadeBeforeDelete to no avail.
>>>
>>> > > >> > I wonder if you could offer any suggestions!  I'm quite new to
>>> > > >> > NHibernate, but appreciate its power and convenience :-)
>>>
>>> > > >> > Kindest regards,
>>>
>>> > > >> > Mark
>> >>
>>
>
>
>
> --
> Regards,
> Karron
>



-- 
Regards,
Karron

--~--~---------~--~----~------------~-------~--~----~
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