I use the class below to access mysql. after a few queries, the application 
pool of IIS 7.5 increases to around 1 GB of RAM. I checked that the dispose 
method of the class is always executed. Why is this happening? And 'normal 
connections mysql remain in  'sleep' ?

Thank you

JK

public class RepositoryBase: IDisposable
{
    protected ISession _session = null;
    protected ITransaction _transaction = null;
    public Boolean extension_transaction = false;
   
   
    
    
    public RepositoryBase(string connectionString)
    {
        
        _session = 
NHibernateMultipleHelper.GetCurrentSession(connectionString);
        _transaction = _session.BeginTransaction();
    }

    public RepositoryBase(ISession session)
    {
        _session = session;
    }

    #region Transaction and Session Management Methods

    public void BeginTransaction()
    {
        _transaction = _session.BeginTransaction();
    }

    public void CommitTransaction()
    {
        // _transaction will be replaced with a new transaction
        // by NHibernate, but we will close to keep a consistent state.
            _transaction.Commit();
            CloseTransaction();
    }
    public virtual object GetById(Type objType, object objId)
    {
        return _session.Get(objType, objId);
    }
    public void RollbackTransaction()
    {
        // _session must be closed and disposed after a transaction
        // rollback to keep a consistent state.
        _transaction.Rollback();

        CloseTransaction();
        CloseSession();
    }

    private void CloseTransaction()
    {
        _transaction.Dispose();
        _transaction = null;
    }

    private void CloseSession()
    {
        _session.Clear();
        _session.Close();
        _session.Dispose();
        _session = null;
    }

    #endregion

    #region IRepository Members

    public virtual IQuery getSQLQuerySession(ref IQuery query, string sql)
    {

        return _session.CreateSQLQuery(sql);

    }

    public virtual IQuery getQuerySession(ref IQuery query, string sql)
    {

        return _session.CreateQuery(sql);
        
    }
    public virtual IQuery setQuerySession(string sql)
    {

        return _session.CreateQuery(sql);

    }
    
    public virtual void Save(object obj)
    {
        _session.SaveOrUpdate(obj);
        
    }

    public virtual void Persist(object obj)
    {
        _session.Persist(obj);

    }

    public virtual void Delete(object obj)
    {
        
        _session.Delete(obj);
        
    }

    public virtual void Evict(object obj) {
        _session.Evict(obj);

    }

   

    #endregion

    #region IDisposable Members

    public void Dispose()
    {
        if (_transaction != null)
        {
            // Commit transaction by default, unless user explicitly rolls 
it back.
            // To rollback transaction by default, unless user explicitly 
commits,
            // comment out the line below.
            
                CommitTransaction();
            
        }

        if (_session != null)
        {
            _session.Flush(); // commit session transactions
            CloseSession();
        }
    }

    #endregion
}

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhusers+unsubscr...@googlegroups.com.
To post to this group, send email to nhusers@googlegroups.com.
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to