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