One of the things that get me thoroughly confused is the use of session.Flush
,in conjunction with session.Commit
, and session.Close
.
Sometimes session.Close
works, e.g., it commits all the changes that I need. I know I need to use commit when I have a transaction, or a unit of work with several creates/updates/deletes, so that I can choose to rollback if an error occurs.
But sometimes I really get stymied by the logic behind session.Flush
. I have seen examples where you have a session.SaveOrUpdate()
followed by a flush, but when I remove Flush it works fine anyway. Sometimes I run into errors on the Flush statement saying that the session timed out, and removing it made sure that I didn’t run into that error.
Does anyone have a good guideline as to where or when to use a Flush? I’ve checked out the NHibernate documentation for this, but I still can’t find a straightforward answer.