Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Harus Mengurus Sambungan dan Transaksi Dengan Berkesan dengan Dapper?

Bagaimanakah Saya Harus Mengurus Sambungan dan Transaksi Dengan Berkesan dengan Dapper?

Barbara Streisand
Lepaskan: 2024-12-19 07:44:10
asal
581 orang telah melayarinya

How Should I Manage Connections and Transactions Effectively with Dapper?

Mengurus Sambungan dengan Dapper

Dalam Dapper, mengurus sambungan dikendalikan dalam dua cara utama:

Menguruskan Sambungan Sepenuhnya

Dalam pendekatan ini, pembangun bertanggungjawab untuk membuka dan menutup sambungan secara eksplisit. Sama seperti mengendalikan sambungan dalam ADO.NET.

Membenarkan Dapper Mengurus Sambungan

Dapper boleh membuka dan menutup sambungan secara automatik jika belum diuruskan oleh pembangun. Ini seperti menggunakan kaedah DataAdapter.Fill().

Walau bagaimanapun, adalah disyorkan agar pembangun mengurus sambungan mereka sendiri, terutamanya untuk senario yang melibatkan berbilang pertanyaan dalam butiran yang lebih luas (cth., setiap permintaan).

Amalan Terbaik Pengendalian Sambungan

Untuk mengelakkan kebocoran sumber dan meningkatkan prestasi, sambungan harus ditutup selepas digunakan. Ini boleh dicapai dengan:

  • Memanggil Close(), Dispose(), atau melampirkan sambungan dalam blok menggunakan.

Untuk meningkatkan lagi pengurusan sumber, pertimbangkan untuk melaksanakan satu Unit Kerja untuk menguruskan urus niaga.

Contoh Kod untuk Unit Kerja di C#

Contoh berikut menyediakan contoh pelaksanaan UnitOfWork yang mengendalikan pengurusan transaksi:

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;
    }
}
Salin selepas log masuk

Corak Repositori dengan Unit Kerja

Repositori dalam kod ini bergantung pada suntikan kebergantungan dengan pembina untuk menerima UnitOfWork, menyediakan lokasi pusat untuk mengawal akses kepada pangkalan data.

Kod Contoh untuk Repositori dengan Unit Kerja

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, .........);
    }
}
Salin selepas log masuk

Penggunaan Unit Kerja

Contoh penggunaan UnitOfWork dengan transaksi:

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;
    }
}
Salin selepas log masuk

Contoh penggunaan tanpa transaksi:

using(DalSession dalSession = new DalSession())
{
    //Database code
    MyRepository myRepository = new MyRepository(dalSession.UnitOfWork);
    myRepository.Insert(myPoco);
}
Salin selepas log masuk

Dengan mengawal sambungan dan transaksi secara berpusat dengan Unit Kerja, pembangun boleh menambah baik pengurusan sumber dan memastikan integriti data yang betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Harus Mengurus Sambungan dan Transaksi Dengan Berkesan dengan Dapper?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan