views:

180

answers:

1

I am using NHibernate with mySQL 5 and I am a bit unsure whether NHibernate really closes the connection to mySQL.

This is the code I am using in order to save a Player entity to the database:

        using (ISession session = SessionFactory.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Save(player);
                transaction.Commit();
            }
        }

After running this piece of code, I select the current connection count from the mySQL server using

show status like 'Conn%' ;

and the value is increased every time by 1!

So, inserting the player 10 times (=starting the program 10 times) increases the connection count by 10. But the session.IsClosed property of the NHibernate Session is false.

Do I have to do anything else in order to release the NHibernate resources and close the connection? Are the connections pooled / timed out?

It would be great if anyone could give me a hint.

+1  A: 

I'm pretty sure the Connection is being closed. The dispose method on the ISession does just that. So it's unlikely it remains open when exiting the using block.

Also , from what I know the connection is usually opened only when writing/reading to the database . The session may be open, but that doesn't mean the connection is also open.

That, plus the fact that in the mysql documentation, it says that the keyword Connections means :

The number of connection attempts (successful or not) to the MySQL server.

and doesn't say anything about the current state of the connection (open or not), makes me believe that the connection is closed.

PS: you should be using Threads_connected to see open connections.

sirrocco