Refactor duplicate code for opening session into DataMapperLocalSessionScope
----------------------------------------------------------------------------

                 Key: IBATISNET-262
                 URL: https://issues.apache.org/jira/browse/IBATISNET-262
             Project: iBatis for .NET
          Issue Type: Improvement
    Affects Versions: DataMapper 2.0
            Reporter: Ron Grabowski
            Assignee: Gilles Bayon
            Priority: Minor


Move duplicate code for creating the local session into a class level scope 
that has access to the private members of DataMapper:

private class DataMapperLocalSessionScope : IDisposable
{
    private readonly ISession session;
    private readonly bool isSessionLocal = false;

    public DataMapperLocalSessionScope(DataMapper dataMapper)
    {
        isSessionLocal = false;
        session = dataMapper.sessionStore.CurrentSession;

        if (session == null)
        {
            session = dataMapper.sessionFactory.OpenSession();
            isSessionLocal = true;
        }
    }

    public ISession Session
    {
        get { return session; }
    }

    public void Dispose()
    {
        if (isSessionLocal)
        {
            session.Close();
        }
    }
}

to avoid duplicating code across 22 methods. The code in each of the Query... 
methods is now much shorter:

public IList QueryForList(string statementId, object parameterObject)
{
    using (DataMapperLocalSessionScope sessionScope = new 
DataMapperLocalSessionScope(this))
    {
        IMappedStatement statement = modelStore.GetMappedStatement(statementId);
        return statement.ExecuteQueryForList(sessionScope.Session, 
parameterObject);
    }
}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to