Dopo aver superato i piccoli problemi tecnici che mi impedivano di "postare" (grazie al buon Andrea) eccomi nuovamente operativo .
Ecco una casistica che abbiamo affrontato ultimamente all'interno del team di sviluppo, ovvero l'utilizzo di cache di 2° livello e connessione manuale con NHibernate (purtroppo utilizziamo ancora la 1.2.1).
Come da post del buon Ayende, nel momento in cui si utilizza una connesione manuale la cache di 2° livello non funziona più correttamente. Dopo le prime ricerche siamo giunti alla soluzione che utilizziamo attualmente, ovvero realizzare un ConnectionProvider personalizzato.
Nel nostro caso abbiamo bisogno di utilizzare la connessione ad un DB A o un DB B in base a delle particolari condizioni (ovviamente sono strutture identitche) e quindi abbiamo realizzato una soluzione di questo tipo (prendete con le molle lo "pseudocodice") :

public class CustomConnectionDriver : NHibernate.Connection.ConnectionProvider
{
    public override IDbConnection GetConnection()
    {
        IDbConnection currentConnection;
        //Selezione della connessione in base ai criteri
        if (....)
        {
            currentConnection = ConnessioneA;
        }
        else
        {
            currentConnection = ConnessioneB;
        }
        currentConnection.Open();
        return currentConnection;
    }
}


Successivamente andrà configurato nel file di NHibernate il nostro nuovo connection provider:

<property name="connection.provider">CustomConnectionDriver </property>

Ora basta avviare il progetto e provare a verificare il corretto funzionamento della cache di 2° livello.