2010-07-22 4 views
3

transactionScope 당 한 번에 100 개의 레코드 만 삽입 할 수 있습니까? 응용 프로그램에서 시간 초과를 피하기 위해 이런 식으로 작업하고 싶습니다.트랜잭션 당 100 개의 레코드 삽입

using(var scope = new TransactionScope()) 
{ 

foreach (object x in list) 

     { 
      // doing insertOnSubmit here 
     } 

context.SubmitChanges(); 
scope.Complete(); 

}

그래서 난 그냥 시간 제한을 피하기 위해 트랜잭션 내에서 단지 100 또는 50 행을 삽입하고 싶습니다.

답변

3

이와 비슷한 기능이 있습니까?

TransactionScope scope; 
bool committed = false; 
int i = 0; 
const int batchSize = 100; // or even 50 

try 
{ 
    foreach (object x in list) 
    { 
     if (i % batchSize == 0) 
     { 
      if (scope != null) 
      { 
       scope.Commit(); 
       scope.Dispose(); 
       context.SubmitChanges(); 
      } 
      scope = new TransactionScope(); 
     } 

     // doing insertOnSubmit here 
     ++i; 
    } 

    if (scope != null) 
    { 
     scope.Commit(); 
     context.SubmitChanges(); 
    } 
} 
finally 
{ 
    if (scope != null) 
    { 
     scope.Dispose(); 
    } 
} 
+0

코드에서 완전히 벗어 났던 것이 있습니다. 언제 내가 변했어? 도와 줘서 고마워. – Hallaghan

+0

@Hallaghan : Doh. 그것은 아니었다! 수정 됨 : – MPritchard

+0

고맙습니다. 필요한 것입니다! 이 웹 사이트에서 우리가 어떻게 배울 수 있는지 정말 좋아합니다! – Hallaghan

1

확실히. 50-100 개의 레코드마다 새로운 트랜잭션을 시작하십시오. 당신의 정확한 문제는 무엇입니까?

+0

foreach 반복을 시작하기 전에 트랜잭션을 시작하고 foreach 내에 모든 삽입을 수행합니다. (반복되는 목록에 최대 10000 개 이상의 개체가있을 수 있습니다.) 이 범위에서 새 트랜잭션을 시작하려면 어떻게해야할지 모르겠습니다. – Hallaghan

+0

새 TransactionScope를 만들 수 있습니다. – codymanix

관련 문제