2016-10-01 5 views
1

현재 연결과 관련된 트랜잭션이 완료되었지만 처리되지 않았습니다. 트랜잭션을 SQL 문을 실행하기 전에 처리해야합니다.Entity Framework에서 트랜잭션 범위 문제가 발생했습니다.

트랜잭션에서 EF6을 통해 저장하려고하면 위의 오류가 발생합니다. 테이블에서 데이터를 업데이트하고 해당 테이블에 대해 업데이트 할 때 트리거가 있습니다. 그래서, 내가 모든 트리거를 해제하면 잘 작동하지만 트리거를 활성화하면 위에서 언급 한 오류가 발생합니다.

using (TransactionScope transaction = new TransactionScope()) 
{ 
    var obj = this._objRepo.GetobjCodesByName("xxxxxx"); 
    obj.CodeName = "eeee"; 

    this._context.SaveChanges(); 
    transaction.Complete(); 

    return Code; 
} 

모든 해결 방법 :

나는

내 거래 코드는 다음과 같습니다 .. 거래,하지만 행운을 억제 시간 제한을 증가 시도?

+0

코드를 표시 할 수 있습니까? – Sampath

답변

0

여기서는 거래를 전혀 사용할 필요가 없습니다. 단 하나의 거래 만 있습니다. 따라서 TransactionScope()을 사용할 필요가 없습니다. 불필요하게 사용하면 절약에 추가 오버 헤드가 생깁니다. 즉, 작업 속도가 느려집니다.

아래와 같이 TransactionScope()을 사용하지 않고 시도해 볼 수 있습니다.

using (var _context= new YourDBEntities()) 
{ 
    //your update code 

    _context.SaveChanges(); 
} 
0

코드의 전체 범위를 알지 못합니다. 그러나 귀하의 질문에 게시 된 코드 스 니펫을 기반으로 문제가 있습니다 _objRepo.GetobjCodesByName("xxxxxx");

트랜잭션 범위에서 선택을 억제해야합니다. SQL Server 2005 이상에서는 with (nolock)을 사용하는 경우에도 선택한 테이블에 잠금이 생성됩니다.

이 상황을 해결하기 위해, 당신이 도움이

using (TransactionScope transaction = new TransactionScope()) 
{ 
    using(TransactionScope tsSuppressed = new TransactionScope(TransactionScopeOption.Suppress)) 
    { 
     var obj = this._objRepo.GetobjCodesByName("xxxxxx"); 
     obj.CodeName = "eeee"; 
    } 

    this._context.SaveChanges(); 
    transaction.Complete(); 

    return Code; 
} 

희망 아래와 같은 코드를 다시 작성해야합니다.