Heim > Datenbank > MySQL-Tutorial > Wie kann ich Verbindungen und Transaktionen mit Dapper effektiv verwalten?

Wie kann ich Verbindungen und Transaktionen mit Dapper effektiv verwalten?

Barbara Streisand
Freigeben: 2024-12-19 07:44:10
Original
581 Leute haben es durchsucht

How Should I Manage Connections and Transactions Effectively with Dapper?

Verbindungen mit Dapper verwalten

In Dapper erfolgt die Verwaltung von Verbindungen hauptsächlich auf zwei Arten:

Vollständige Verwaltung von Verbindungen

Bei diesem Ansatz ist der Entwickler dafür verantwortlich, die Verbindung explizit zu öffnen und zu schließen. Ähnlich wie bei der Handhabung von Verbindungen in ADO.NET.

Dapper die Verwaltung von Verbindungen erlauben

Dapper kann Verbindungen automatisch öffnen und schließen, wenn sie nicht bereits vom Entwickler verwaltet werden. Dies ähnelt der Verwendung der DataAdapter.Fill()-Methode.

Es wird jedoch empfohlen, dass Entwickler ihre eigenen Verbindungen verwalten, insbesondere für Szenarien mit mehreren Abfragen innerhalb einer größeren Granularität (z. B. pro Anfrage).

Best Practices für den Umgang mit Verbindungen

Um Ressourcenlecks zu vermeiden und die Leistung zu verbessern, sollten Verbindungen nach der Verwendung geschlossen werden. Dies kann erreicht werden durch:

  • Aufrufen von Close(), Dispose() oder Einschließen der Verbindung in einen using-Block.

Um die Ressourcenverwaltung weiter zu verbessern, sollten Sie die Implementierung in Betracht ziehen eine Arbeitseinheit zum Verwalten von Transaktionen.

Beispielcode für eine Arbeitseinheit in C#

Das folgende Beispiel stellt eine Beispielimplementierung einer UnitOfWork bereit, die die Transaktionsverwaltung übernimmt:

public sealed class UnitOfWork : IUnitOfWork
{
    internal UnitOfWork(IDbConnection connection)
    {
        _id = Guid.NewGuid();
        _connection = connection;
    }

    IDbConnection _connection = null;
    IDbTransaction _transaction = null;
    Guid _id = Guid.Empty;

    IDbConnection IUnitOfWork.Connection
    {
        get { return _connection; }
    }
    IDbTransaction IUnitOfWork.Transaction
    {
        get { return _transaction; }
    }
    Guid IUnitOfWork.Id
    {
        get { return _id; }
    }

    public void Begin()
    {
        _transaction = _connection.BeginTransaction();
    }

    public void Commit()
    {
        _transaction.Commit();
        Dispose();
    }

    public void Rollback()
    {
        _transaction.Rollback();
        Dispose();
    }

    public void Dispose()
    {
        if(_transaction != null)
            _transaction.Dispose();
        _transaction = null;
    }
}
Nach dem Login kopieren

Repository-Muster mit Unit of Work

Repositorys in diesem Code basieren auf der Abhängigkeitsinjektion mit dem Konstruktor, um UnitOfWork zu empfangen, und bieten so einen zentralen Ort für die Steuerung des Zugriffs auf Datenbank.

Beispielcode für Repository mit Arbeitseinheit

public sealed class MyRepository
{
    public MyRepository(IUnitOfWork unitOfWork) 
    {
        this.unitOfWork = unitOfWork;
    }
    
    IUnitOfWork unitOfWork = null;

    public MyPoco Get()
    {
        return unitOfWork.Connection.Query(sql, param, unitOfWork.Transaction, .......);
    }

    public void Insert(MyPoco poco)
    {
        return unitOfWork.Connection.Execute(sql, param, unitOfWork.Transaction, .........);
    }
}
Nach dem Login kopieren

Verwendung der Arbeitseinheit

Beispielverwendung der UnitOfWork mit einer Transaktion:

using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Database code
        MyRepository myRepository = new MyRepository(unitOfWork);
        myRepository.Insert(myPoco);
        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}
Nach dem Login kopieren

Beispielverwendung von ohne a Transaktion:

using(DalSession dalSession = new DalSession())
{
    //Database code
    MyRepository myRepository = new MyRepository(dalSession.UnitOfWork);
    myRepository.Insert(myPoco);
}
Nach dem Login kopieren

Durch die zentrale Steuerung von Verbindungen und Transaktionen mit einer Arbeitseinheit können Entwickler das Ressourcenmanagement verbessern und eine ordnungsgemäße Datenintegrität sicherstellen.

Das obige ist der detaillierte Inhalt vonWie kann ich Verbindungen und Transaktionen mit Dapper effektiv verwalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage