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, .........); } }
작업 단위 사용
사용 예 UnitOfWork의 트랜잭션:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!