I am debating this with myself. Does NHibernate's ISession offer a proper and correct unit of work if used without a transaction? In absence of a transaction, every SQL command would be wrapped by the database server into a different transaction. So there is still a chance that in a batch of 10 SQL commands (flushed from the same session object), 7 are committed, 8th meets and error and the rest (including the 8th) never finish. Same thing happens if FlushMode.Auto is used without an accompanying transaction and a query forces all dirty entities to be flushed to database. After this point, if application thrown an exception then all the changes previously flushed should be rolled back but they would not be. IMO, we almost always need to implement unit work work making use of transaction along with sessions. 
Can NHibernate's ISession be considered as implementation of unit of work pattern?
nhibernate;unit of work