문제

아르 !!!

SharedDBConnectionscope 및 TransactionScope 객체를 둘러싼 약간의 혼란이있는 것 같습니다.

문서는 TransactionScope 사용을 사용하여 포장 된 SharedDBConnectionscope 사용을 지정하는 것을 제안합니다 ...

using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
  using(TransactionScope ts = new TransactionScope())
  {
    // do something
    ts.Complete();
  }
}

그런 다음 여기와 같은 다른 질문 subsonic : shareddbconnectionscope를 트랜잭션과 함께 사용하면 깨진 것 같습니다. 문서가 잘못되었고 두 개체가 다른 방법이어야한다고 제안합니다 ...

using(TransactionScope ts = new TransactionScope())
{
  using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
  {
    // do something
    ts.Complete();
  }
}

그러나 소스 코드를 살펴보면 더 혼란스러워합니다.

sqlquery.cs 코드 파일에는 여러 개의 executeTransaction Overloads가 있습니다. 예를 들어...

public static void ExecuteTransaction(List<SqlQuery> queries)
{
  using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
  {
    using(TransactionScope ts = new TransactionScope())
    {
      foreach(SqlQuery q in queries)
        q.Execute();
    }
  }
}

음 ... 흥미로운 ... 문서와 일치하지만 ... ts.Complete () 호출은 어디에 있습니까?

거래를 어떻게 커밋해야합니까? 내가 볼 수있는 한 항상 롤백이 될 것입니다. 그리고 모든 ExecuteTransaction Overloads에서 동일합니다!

하지만 여기 진짜 키커가 있습니다 ...

Transactionwithdtcofftests.cs Code에는 SharedDBConnectionScope 및 TransactionScope를 다른 방식으로 설정 한 것을 제외하고는 멋진 테스트가 있습니다!

using(TransactionScope ts = new TransactionScope())
{
  using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
  {
    // <snip />
  }
}

나는 Subsonic 2.2에 대한 시험을 실행할 기회가 없었지만 누군가가 가지고 있다고 가정하고 그들은 ..

드디어...

Subsonic2.2의 거래가 어떻게 설정되어야하는지에 대한 확실한 답변을 줄 수 있습니까? 문서가 실제로 잘못 되었습니까? ExecuteTransaction Overloads 및 테스트의 소스가 실제로 올바른 방식으로 정렬됩니까?

도움이 되었습니까?

해결책

SharedConnectionsCope (SCS) 블록은 TransactionScope (TS) 내부에 있어야합니다. SCS의 목적은 가능한 경우 MSDTC 로의 거래가 증가하는 것을 방지하는 것입니다. 따라서 블록을 사용하는 SCS 내부에 TS를 사용하는 것은 나에게 거의 의미가 없습니다. 어쨌든, 모든 TS 블록에는 거래가 커밋 될 완료 () 요청이 있어야합니다.

다른 팁

개인적으로 SQL 2005를 사용할 때 SC는 TS 내부와 SQL 2000 (MSDTC 포함)을 사용할 때 SCS가 TS를 마무리해야한다는 것을 알았습니다. 이게 도움이 되길 바란다...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top