아마도 PetaPoco와의 트랜잭션을 처리하는 데있어 새로운 경험이 될 수 있으므로이 질문은 실제로 멍청한 질문 일 수 있습니다. 문제 PetApoco를 microORM으로 사용하여 db 트랜잭션을 처리해야하는 문제에 직면했습니다. 트랜잭션의 .Complete() 메소드 바로 전에 예외를 throw하면 모든 것이 올바르게 롤백되지만, 예외를 catch하는 경우에는PetaPoco 트랜잭션이 롤백되지 않음
Using scope As PetaPoco.Transaction = db.GetTransaction()
' try/catch here and if the db command fails transaction won't roll back
scope.Complete()
End Using
db 작업 중 하나가 실패하면 트랜잭션이 롤백되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –
PetaPoco 거래에 익숙하지 않습니다. 그러나 PetaPoco의 코드를 빠르게 보면 트랜잭션 관리는 Microsoft 환경에서 우스꽝스럽고 솔직히 쓸모없는 것처럼 보입니다. 왜 트랜잭션 코드를 표준 TransactionScope using 문으로 처리해야합니까 (예 : http://msdn.microsoft.com/library/ee818746.aspx) 대부분의 표준 데이터베이스에서 정상적으로 작동해야합니다. –
Simon, 나는 후드 아래에서 petapoco가 사용하는 것이 petapoco를 사용하는 경우에도 "수동으로"트랜잭션을 롤백 할 수는 없지만 "트랜잭션을 롤백하려는 경우에는 다음과 같이 Complete 메서드를 호출하면 안됩니다 예를 들어, 범위 내에서 예외를 throw 할 수 있습니다. 트랜잭션이 참여하는 트랜잭션은 롤백됩니다. " 하지만 어떤 이유로 나는 .Compete()를 호출하지 않으려했지만 첫 번째 db 쿼리는 동일하게 succeded했습니다. 그런데 평범한 .NET 메소드를 사용하여 여기에 다시보고 할 것입니다. – Manight