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.

Reply via email to