Dapper avec UOW - Ne fermez pas les connexions

dapper repository-pattern unit-of-work

Question

J'ai implémenté mon DAL avec Dapper en utilisant l'artical suivant

Implémentation Dapper

Mais il est créé une connexion avec db chaque appel de base de données. Il ne réutilise pas le pool de connexion. Je crois que j'ai fermé et jeté la connexion correctement.

Voici l'exemple de comment appeler depuis la couche service

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

Ceci est un appel de dépôt

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

Quelqu'un peut-il s'il vous plaît me dire pourquoi beaucoup de connexions sont créées pour chaque appel de base de données. J'ai utilisé la requête SQL suivante pour surveiller le nombre de connexions

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

Merci d'avance

Réponse acceptée

L'article que vous avez mentionné est idéal pour apprendre UoW avec Dapper; J'ai moi-même commencé mon étude de l'UoW avec cet article. J'ai eu des problèmes similaires lors de la mise en œuvre pour répondre aux besoins de mon entreprise et j'ai légèrement modifié le code. Vous pouvez trouver le code détaillé dans cette réponse.

Avec ce code, vous avez plus de contrôle sur la connexion / transaction; vous l'appelez comme ceci:

Avec transaction:

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

Sans transaction:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow