@Krzysztof
here <https://github.com/jfromaniello/NHListenerTests/tree/with-user-audit>
(branch:
with-user-audit) you have a full working example with Modified(date) and
ModifiedBy.
Let me know how to break it so i can help you, works well for me so far.


2011/5/11 Scott Findlater <[email protected]>

> @Krzysztof  Have you managed to get a solution to this, I am in a
> similar situation and attempting to get a conclusive answer
>
> http://groups.google.com/group/nhusers/browse_thread/thread/b6807c2a486073d8/48a40348dbeb8799#48a40348dbeb8799
>
> On May 10, 5:36 am, Krzysztof Kozmic <[email protected]>
> wrote:
> > @Ricardo
> >
> > I was. Actually I was overriding EntityIsTransient/Persistent methods
> > and calling return base.ThisMethod() at the end
> >
> > Krzysztof
> >
> > On May 9, 7:30 pm, Ricardo Peres <[email protected]> wrote:
> >
> >
> >
> >
> >
> >
> >
> > > @Krzysztof:
> >
> > > Shouldn't you be calling the base class' implementation?
> >
> > > public class MySaveOrUpdateEventListener:
> > > DefaultSaveOrUpdateEventListener
> > > {
> > >     public override void OnSaveOrUpdate(SaveOrUpdateEvent @event)
> > >     {
> > >         //do something with the entity
> > >         base.OnSaveOrUpdate(@event);
> > >     }
> >
> > > }
> >
> > > On May 9, 2:53 am, José F. Romaniello <[email protected]> wrote:
> >
> > > > 1 use the interface as fabio Said.
> > > > 2 the order of the listeners is important. I think you should put
> > > > yours after the nhibernates for this case... But to be honest i am
> not
> > > > sure. Ill try it tomorrow
> >
> > > > 2011/5/8, Krzysztof Kozmic <[email protected]>:
> >
> > > > > ok here comes the update.
> >
> > > > > I checked the approach outlined by Fabio again. I implemented the
> > > > > ISaveOrUpdate and IEntityFlush event listeners and I set the values
> > > > > directly on the object.
> >
> > > > > However even though I can see the values are set on the object the
> > > > > INSERT that NHibernate tries to execute passes NULL values for
> those
> > > > > properties instead.
> >
> > > > > Also as a sidenote I noticed even non-dirty objects are passed to
> > > > > those listeners which is at least surprising to me.
> >
> > > > > Also as another sidenote, I used as my base class
> > > > > DefaultSaveOrUpdateListener and I'm overriding EntityIsPersistent/
> > > > > EntityIsTransient methods and NHibernate is passing my newly
> created
> > > > > object to EntityIsPersistent method which is again at least
> > > > > surprising.
> >
> > > > > Anyway - the biggest issue is that NHibernate does not seem to care
> > > > > about the values I provide to the object in the listener and I'm
> sure
> > > > > they are set, because if I look in the debugger at the time the
> > > > > exception is thrown the values are set and I could see my listeners
> > > > > get hit.
> >
> > > > > cheers,
> > > > > Krzysztof
> >
> > > > > On May 7, 2:10 pm, Krzysztof Kozmic <[email protected]>
> > > > > wrote:
> > > > >> I did briefly try that, and ended up having some different issues
> > > > >> (don't remember exactly what the problem was now, I'll try to
> > > > >> reproduce that on Monday).
> >
> > > > >> Does FlushEventListener get called for dirty objects only?
> >
> > > > >> Cheers,
> > > > >> Krzysztof
> >
> > > > >> On May 6, 10:04 pm, Fabio Maulo <[email protected]> wrote:
> >
> > > > >> > IPreUpdate is intended to be used for entity-state checking
> (veto) not
> > > > >> > to
> > > > >> > change the state.
> > > > >> > What is happening is that NH found a strange operation in a
> collection
> > > > >> > (something like "somebody have changed it outside my control or
> I have a
> > > > >> > bug").
> > > > >> > For what you need you have to use ISaveOrUpdateEventListener
> > > > >> > public void OnSaveOrUpdate(SaveOrUpdateEvent @event)
> > > > >> > {
> > > > >> > var trackable = @event.Entity as ITrackModificationDate;
> > > > >> > if (trackable != null)
> > > > >> > {
> > > > >> > trackable.LastModified = CurrentDateTimeProvider();
> >
> > > > >> > }
> > > > >> > }
> >
> > > > >> > and IFlushEntityEventListener
> > > > >> > public void OnFlushEntity(FlushEntityEvent @event)
> > > > >> > {
> > > > >> > if(@event.EntityEntry.Status == Status.Deleted)
> > > > >> > {
> > > > >> > return;}
> >
> > > > >> > var trackable = @event.Entity as ITrackModificationDate;
> > > > >> > if (trackable != null)
> > > > >> > {
> > > > >> > trackable.LastModified = CurrentDateTimeProvider();
> >
> > > > >> > }
> > > > >> > }
> >
> > > > >> > As you can see, using right events you don't need to use NH
> internals
> > > > >> > state.
> >
> > > > >> > For collection you have another set of events. In general *you
> shouldn't
> > > > >> > initialize a collection* in an NH's event.
> >
> > > > >> > 2011/5/6 Krzysztof Ko¼mic <[email protected]>
> >
> > > > >> > > I'm using Oracle database.
> > > > >> > > I have a IPreUpdateEventListener and IPreInsertEventListener
> which set
> > > > >> > > CreatedBy and UpdatedBy properties on some of the entities.
> >
> > > > >> > > Those properties point to another entity Person which is
> assigned in
> > > > >> > > the
> > > > >> > > listeners via Session.Load<>
> >
> > > > >> > > this all used to work quite nice when I had my POID generator
> > > > >> > > specified as
> > > > >> > > "sequence-identity" (we use sequences in Oracle)
> >
> > > > >> > > today I tried to switch POID generator to "sequence" which
> would allow
> > > > >> > > me
> > > > >> > > to utilize batching which I also enabled.
> >
> > > > >> > > Here's where I started getting this exception:
> >
> > > > >> > > collection: [Person.FooBars] was not processed by flush()
> >
> > > > >> > > the exception happens only when the Session.Load<> in my event
> > > > >> > > listeners
> > > > >> > > doesn't already have the Person I'm requested accessible (that
> is only
> > > > >> > > when
> > > > >> > > Load<Person> returns a proxy). If I load the person beforehand
> (and
> > > > >> > > not in
> > > > >> > > the listener) the exception does not occur.
> >
> > > > >> > > Any ideas what the reason for that is and how do I fix it?
> >
> > > > >> > > Krzysztof
> >
> > > > >> > > --
> > > > >> > > 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.
> >
> > > > >> > --
> > > > >> > Fabio Maulo
> >
> > > > > --
> > > > > 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.
> >
> > > > --
> > > > Enviado desde mi dispositivo móvil
>
> --
> 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.
>
>

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