2011-03-23 4 views
0

하나의 트랜잭션에 2 개의 레코드를 하나의 db에 삽입하고 약 40 개의 레코드를 다른 db에 삽입해야합니다. TransactionScope를 사용하고 있는데이 오류가 발생했습니다.Dotconnect for Oracle - EF - 글로벌 트랜잭션에서 너무 많은 로컬 세션

이 기사를 읽었지만 도움이되지 않습니다. 왜냐하면 2 db가 관련되어 있고 분산 트랜잭션이기 때문입니다.

http://www.devart.com/blogs/dotconnect/index.php/entity-framework-tips-and-tricks-part-3.html

내 코드는 다소 아래와 같이합니다. 내가 (위의 링크의 예와는 달리) 내 루프 밖에 "컨텍스트"를 만드는 오전 비록

using (var ts = new TransactionScope()) { 
    using (var context = new MyContext()) { 
     for (int i = 0; i < 40; i++) 
     { 
     var order = context.Orders.Where(a => a.name = 'xxx').Single(); 
     context.ArchiveOrders.Add(order); 
     } 
    } 
} 

이 코드는 여전히 "너무 많은 지방 세션"오류와 함께 실패합니다.

또한 "모든 context.Orders.Where (...)"쿼리가 새로운 트랜잭션으로 등록되었음을 확인했습니다. Entity Framework 및 SQL Linq 않습니다 사용하고 있습니다. 따라서 위의 코드는 20 번 반복됩니다.

내 옵션은 이제 2 개의 독립적 인 로컬 트랜잭션을 만들지 않고 수동으로 트랜잭션 처리를 수행합니다.

답변

0

우리는 포럼에서 here님께 서 응답하셨습니다. 해결 방법은 루프 앞에 context.Connection.Open();을 추가하는 것입니다.