Yes, it looks like your three points are correct. I ran another test where I had 5 GROUPs, each containing 1 DOCUMENT. I did an NHibernate query that returned an ICollection with the 5 GROUP objects. I went through the in-memory DOCUMENT objects and changed a property value. I then did an NHibernate Update on just one of my GROUP objects. The result was that all 5 of my DOCUMENT objects were updated in the database. I was able to see in the output console that NHibernate did 5 updates:
NHibernate: UPDATE RPT_DOCUMENT_BASE SET ........ I then went to add the "inverse=true" attribute to my <bag> as you suggested, but the results were the same: 5 updates. As for the session management, I do: 1) Open ISession for the search and keep it in memory. 2) Alter DOCUMENT properties to the in-memory objects. 3) Do an NHibernate Update on the GROUP (not the DOCUMENT, but the GROUP). When an update is being called, I get my session from #1 and do an Update using that session. As a note, I always update the GROUP rather than just the DOCUMENT because with any DOCUMENT change, I also make a "modified date" update change to the GROUP as well. If I do another search, I close/dispose the existing session and start over. Essentially, I keep my search session open in case I need to do an update or delete. If I do another search, then I know I can scrap the old search session and get a new one. This process does not impact the current scenario, however, as we are only dealing with the first session. Looking at Oskar's reply earlier, however, he is indicating that it is working as intended. Oskar, if you are reading this I am very confused by what you stated. Part of what you said was: ISession.Update() is used for making the session aware of an instance that was loaded from a _previous_ session - i.e. load in one session and perform changes in another. So if you load and perform changes on the object in the same session, you should not call Update() on it. What I found was that if I didn't use the SAME ISession (the same session that was used to retrieve the objects) when I went to do an Update call, I got an exception that the session had been closed and the update could not take place. I could only do a successful update on an object if I used the same session. Per your last sentence, how do you persist changes to the DB if you don't call Update() on the changed object? More confused - Peter -- 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.
