Dapper con UOW - No cierre las conexiones

dapper repository-pattern unit-of-work

Pregunta

Implementé mi DAL con Dapper usando el siguiente artical

Dapper Implementation

Pero se crea una conexión con db cada llamada a la base de datos. No reutiliza el grupo de conexiones. Creo que cerré y eliminé la conexión correctamente.

Esta es la muestra de cómo llamar desde la capa de servicio

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

Esta es una llamada de repositorio

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;
    }

¿Puede alguien decirme por qué se crean muchas conexiones para todas y cada una de las llamadas a la base de datos? Utilicé la siguiente consulta SQL para controlar el número de conexiones

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

Gracias por adelantado

Respuesta aceptada

El artículo que mencionó es excelente para aprender UoW ​​con Dapper; Yo mismo comencé mi estudio de UoW con ese artículo. Tuve problemas similares al implementarlo para satisfacer las necesidades de mi negocio y modifiqué un poco el código. Puedes encontrar un código detallado en esta respuesta.

Con este código, obtienes más control sobre la conexión / transacción; lo llamas así:

Con la transacción:

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

Sin transacción:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué