Dapper con UOW - Non chiudere le connessioni

dapper repository-pattern unit-of-work

Domanda

Ho implementato il mio DAL con Dapper utilizzando il seguente articolo

Implementazione di Dapper

Ma viene creata una connessione con db ogni e ogni chiamata al database. Non riutilizza il pool di connessioni. Credo di aver chiuso e smaltito correttamente la connessione.

Questo è l'esempio di come chiamare dal livello di servizio

dtoList = unitofWork.RegionalSettingRepository.GetCurrencySymbols(); unitofWork.Commit(); // To close the connections

Questa è la chiamata al repository

public List<CurrencySymbolDTO> GetCurrencySymbols()
    {
        List<CurrencySymbolDTO> dtoList = null;
        try
        {
            string strSQL = "SELECT * from CurrencySymbol";
            dtoList = this.Connection.Query<CurrencySymbolDTO>(strSQL, null, transaction: Transaction).ToList();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {

        }
        return dtoList;
    }

Qualcuno può dirmi perché vengono create molte connessioni per ogni chiamata al database. Ho usato la seguente query SQL per monitorare il numero di connessioni

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE DB_NAME(dbid) ='database name' GROUP BY dbid, loginame

Grazie in anticipo

Risposta accettata

L'articolo che hai citato è ottimo per imparare UoW con Dapper; Io stesso ho iniziato il mio studio su UoW con quell'articolo. Ho avuto problemi simili mentre lo implementavo per soddisfare le mie esigenze di business e ho modificato il codice un po '. Puoi trovare il codice dettagliato in questa risposta.

Con questo codice, ottieni un maggiore controllo sulla connessione / transazione; lo chiami così:

Con transazione:

using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Your database code here
        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}

Senza transazione:

using(DalSession dalSession = new DalSession())
{
    //Your database code here
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché