:-D OK, I see we aren't getting nowhere... the question remains, still: the SaveOrUpdate event fires for entities loaded from properties of another entities, and not for a directly loaded entity.
Thank you for your time, I will try to find a workaround! RP On May 24, 3:26 pm, Fabio Maulo <[email protected]> wrote: > I found your bug. > As said IsDirty raise the event but then, as you said: > "SaveOrUpdate event is raised, which, in my case, triggers a change in an > entity, causing the session to be dirty " > > I found who change the state of an entity. > > > > > > > > > > On Tue, May 24, 2011 at 11:14 AM, Ricardo Peres <[email protected]> wrote: > > Fabio, > > > But... I have posted a complete fully working example with the JIRA > > issue, with nothing but two classes, mappings and the test! > > It even creates the data model, and populates it... > > :-) > > > RP > > > On May 24, 3:11 pm, Ricardo Peres <[email protected]> wrote: > > > Fabio, > > > > Don't get me wrong: I have followed the stack trace, and I know why > > > this is happening (in the code); I just don't understand it. > > > First of all: from a conceptual point of view, should the > > > ISession.IsDirty() fire SaveOrUpdate, on non-dirty entities, or on any > > > entities at all? > > > Second: why, if we are loading the entity by its it, the event does > > > not fire, and if we load it from a property of another entity, it > > > does? > > > IMHO, if you answer yes to the first question, there is a bug: it > > > isn't being fired if the entity is not directly loaded. > > > I don't want to take your time, just to understand this. Am I the only > > > one who doesn't understand this behavior? > > > > Thanks! > > > > RP > > > > On May 24, 3:05 pm, Fabio Maulo <[email protected]> wrote: > > > > > The only thing done by IsDirty is just fire an event > > > > DirtyCheckEvent dcEvent = new DirtyCheckEvent(this); > > > > IDirtyCheckEventListener[] dirtyCheckEventListener = > > > > listeners.DirtyCheckEventListeners; > > > > for (int i = 0; i < dirtyCheckEventListener.Length; i++) > > > > { > > > > dirtyCheckEventListener[i].OnDirtyCheck(dcEvent);} > > > > > return dcEvent.Dirty; > > > > You can disable/replace/override that event. > > > > > On Tue, May 24, 2011 at 10:21 AM, Ricardo Peres <[email protected]> > > wrote: > > > > > Fabio, > > > > > You have closed JIRA issues NH-2727 saying that it is not an issue. > > > > > Perhaps you can explain me, because this is bugging me, why does the > > > > > following line raise the SaveOrUpdate event and the next doesn't: > > > > > > //raises SaveOrUpdate > > > > > User u = session.Query<User>().FirstOrDefault(); > > > > > UserGroup ug = u.UserGroup.First(); > > > > > > //does not raise > > > > > UserGroup ug = session.Query<UserGroup>().FirstOrDefault(); > > > > > User u = ug.User; > > > > > > By the way, in general, why does ISession.IsDirty() fire any events? > > > > > Shouldn't it just check the current state of entities in memory? > > > > > > Thank you for your time, once again! > > > > > > RP > > > > > -- > > > > Fabio Maulo > > -- > Fabio Maulo
