Indeed, I did run the code with the commented out line, and the
OnPreUpdate still gets called. I even commented out the entity state
update (separately), and still OnPreUpdate gets called.

So I'm still not understanding why this happens.

On Aug 21, 2:50 pm, Chris F <[email protected]> wrote:
> "This doesn't generate the extra update. I just couldn't see the
> difference." ?? Did you mean DOES generate?
>
> I wasn't able to discern what you meant in your last post. I totally
> get that you have to perform the Set on the @event.State, AND that you
> have to update the entity:
>
> (1) Set(@event.Persister, @event.State, "CreatedDate", createdDate);
> (2) entity.CreatedDate = createdDate;
>
> But are you saying that (2) causes the OnPreUpdate to get called?
>
> I guess I could get that answer by commenting out the
> entity.CreatedDate = createdDate and see if the OnPreUpdate gets
> called.
>
> Sorry for asking for further clarification.
>
> - Chris
>
> On Aug 21, 2:36 pm, sirrocco <[email protected]> wrote:
>
> > Well .. there is an answer to this :) .
>
> > You have to set the value in that state array AND on the entity. It
> > took me an hour to realize this even though I found the following
> > code :
>
> >                         var audit = @event.Entity as IAudit;
>
> >                         if(audit == null)
> >                                 return false;
>
> >                         var time = DateTime.Now;
> >                         Set(@event.Persister, @event.State, "RecordStamp", 
> > time);
>
> >                         audit.RecordStamp = time;
>
> > This doesn't generate the extra update . I just couldn't see the
> > difference .
>
> > The Set method has nothing special :
>
> > private void Set(IEntityPersister persister, object[] state, string
> > propertyName, object value)
> >                 {
> >                         var index = Array.IndexOf(persister.PropertyNames, 
> > propertyName);
> >                         if (index == -1)
> >                                 return;
> >                         state[index] = value;
> >                 }
>
> > So : you have to set the value both in the State array AND on the
> > entity :).
>
> > HTH
>
> > On Aug 21, 8:47 pm, Chris F <[email protected]> wrote:
>
> > > +1
>
> > > I've seen the same behaviour while debugging another problem.
> > > Immediately after running through my OnPreInsert code for all the
> > > entities being created, the OnPreUpdate is called for all the same
> > > entities.
>
> > > On Aug 11, 9:57 am, sirrocco <[email protected]> wrote:
>
> > > > If in an Event , onOnPreInsertI set a property ( RecordStamp) like
> > > > so :
>
> > > >       var index = Array.FindIndex(names, n => n == "RecordStamp");
> > > >       if (index == -1) return;
>
> > > >       state[index] = DateTimeService.Now;
>
> > > > Can this cause an update after the insert ? The thing is that after
> > > > the app entersOnPreInsert, then on Commit it goes through the
> > > > OnPreUpdate.
>
> > > > The entity has an identity PrimaryKey.
> > > > The flow would be like this :
>
> > > > Entity e = new Entity()
> > > > session.Save(e) ->OnPreInsert
>
> > > > Commit -> OnPreUpdate
>
> > > > Any explanation of the behavior is much appreciated .
--~--~---------~--~----~------------~-------~--~----~
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