Dapper mit UOW - Schließen Sie keine Verbindungen

dapper repository-pattern unit-of-work

Frage

Ich habe meinen DAL mit Dapper implementiert, indem ich folgendes artical benutzt habe

Dapper Implementierung

Aber es wird eine Verbindung mit Db jeden Datenbankaufruf erstellt. Der Verbindungspool wird nicht wiederverwendet. Ich glaube, ich habe die Verbindung richtig geschlossen und angeordnet.

Dies ist ein Beispiel dafür, wie aus der Service-Schicht heraus aufgerufen wird

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

Dies ist Repository-Aufruf

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

Kann mir bitte jemand sagen, warum viele Verbindungen für jeden Datenbankaufruf erstellt wurden. Ich habe folgende SQL-Abfrage verwendet, um die Anzahl der Verbindungen zu überwachen

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

Danke im Voraus

Akzeptierte Antwort

Der Artikel, den du erwähnt hast, ist großartig, um mit Dapper UoW ​​zu lernen. Ich selbst habe mit diesem Artikel mein Studium der UOW begonnen. Ich hatte ähnliche Probleme bei der Implementierung, um meine Geschäftsanforderungen zu erfüllen, und ich änderte den Code ein wenig. Sie können detaillierten Code in dieser Antwort finden.

Mit diesem Code erhalten Sie mehr Kontrolle über die Verbindung / Transaktion; Du nennst es so:

Mit Transaktion:

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

Ohne Transaktion:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum