在Dapper 中,管理連線主要透過兩種方式處理:
完全管理連線
在這種方法中,開發人員負責明確開啟和關閉連線。與在 ADO.NET 中處理連線類似。
允許 Dapper 管理連線
如果開發人員尚未管理連接,Dapper 可以自動開啟和關閉連線。這就像使用 DataAdapter.Fill() 方法。
但是,建議開發人員管理自己的連接,特別是對於涉及更廣泛粒度(例如每個請求)內的多個查詢的場景。
連接處理最佳實踐
為了避免資源洩漏並提高效能,應在之後關閉連線 使用。這可以透過以下方式實現:
要進一步增強資源管理,請考慮實施管理事務的工作單元。
工作單元的範例程式碼C#
以下範例提供了處理事務管理的UnitOfWork 的範例實作:
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; } }
具有工作單元的儲存庫模式
此程式碼中的儲存庫依賴建構函式的依賴注入來接收 UnitOfWork,為控制對資料庫。
具有工作單元的儲存庫的範例程式碼
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, .........); } }
工作單元的使用
範例工作單元的事務:
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; } }
沒有事務的範例用法:
using(DalSession dalSession = new DalSession()) { //Database code MyRepository myRepository = new MyRepository(dalSession.UnitOfWork); myRepository.Insert(myPoco); }
透過使用工作單元集中控制連線和事務,開發人員可以改善資源管理並確保適當的資料完整性。
以上是我應該如何使用 Dapper 有效管理連線和事務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!