"dapper-dot-net"의 트랜잭션

architecture dapper data-access-layer

문제

내 DAL이 dapper-dot-net을 사용하고 있다면 어떻게 트랜잭션을 생성합니까?

내 c # winform 응용 프로그램이 네트워크에서 사용되고 데이터가 중앙 SQL 서버에 저장됩니다.

내 유스 케이스에는 트랜잭션 사용이 필요합니다. 내가 dapper를 사용하여이 작업을 수행 할 수 있습니까? 아니면 NHibernate와 같은 것을 사용해야합니까?

또한 저장 프로 시저를 사용하는 경우이 프레임 워크에 대한 위험이나 제한이 있습니까? 가능한 한계로 인해 접근 방식을 변경해야합니까?

수락 된 답변

나는 sprocs를 사용할 때 어떤 제한도받지 않았고, 당신이 sprocs와 가질 위험도 똑같다.

다음은 dapper로 트랜잭션을 사용하는 방법에 대한 간단한 예입니다.

using (var connection = Db.GetConnection())
{
     connection.Open();
     IDbTransaction transaction = connection.BeginTransaction();
     try
     {
         var newId= connection.Query<int>(@"Select id from table1 where id=@id", new{id}, transaction).Single();
         connection.Execute(@"INSERT into table1 ...",new {p1, p2}, transaction);
         connection.Execute(@"INSERT into table2 ...",new {p1, p2}, transaction);
         transaction.Commit();
     }
     catch (Exception ex)
     {
         transaction.Rollback();
     }
}

전문가 답변

dapper는 ado.net 트랜잭션과 암시 적 트랜잭션을 모두 사용할 수 있습니다. ado.net 트랜잭션의 경우, 트랜잭션을 정상적으로 작성하고 기본 메소드에서 사용할 수있는 transaction 매개 변수를 통해 transaction 제공하십시오. 암시 적 트랜잭션의 경우 TransactionScope 정상적으로 사용하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow