NHibernate ISession Flush: Onde e quando usá-lo e por quê?

Uma das coisas que me deixa completamente confuso é o uso desession.Flush,em conjunção comsession.Commitesession.Close.

As vezessession.Close funciona, por exemplo, confirma todas as alterações necessárias. Sei que preciso usar o commit quando tenho uma transação ou uma unidade de trabalho com várias criações / atualizações / exclusões, para que eu possa optar por reverter se ocorrer um erro.

Mas às vezes fico realmente frustrado com a lógica por trássession.Flush. Eu vi exemplos em que você tem umsession.SaveOrUpdate() seguido de um flush, mas quando removo o flush, ele funciona bem de qualquer maneira. Às vezes, encontro erros na instrução Flush dizendo que a sessão atingiu o tempo limite e a remoção garantiu que não encontrei esse erro.

Alguém tem uma boa orientação sobre onde ou quando usar um Flush? Verifiquei a documentação do NHibernate para isso, mas ainda não consigo encontrar uma resposta direta.

questionAnswers(4)

yourAnswerToTheQuestion