Hi,
NHibernate uses an Unit of Work (
http://martinfowler.com/eaaCatalog/unitOfWork.html) to track all changes made to persistent objects. It is correct behaviour for NHibernate it to persist changes to entities automatically.
Session.Update() takes a
transient entity, and updates the persistent entity with the same identifier. It does not (necessarily) write an update to the database.
Session.Flush() is what writes any pending changes in the Unit of Work to the database.
The default flush-mode is 'auto', so NHibernate will write changes automatically before making certain queries on the database, or when you commit your transaction. The flush-mode can be set to 'never' if you do not want NHibernate to update the database and you wish to do this manually.
If you have a persistent object you want to make changes to, without the changes being persisted, you can Evict() the persistent entity from the session.
Hope that helps to clarify how NHibernate works.
Regards,
Richard