2014-09-30 3 views
1

내 문제에 대해 명확하지 않을 경우 사전에 사과하지만 아직 프로젝트를 진행하고 있지는 않습니다. 아직 이해가되지 않으므로 언제든지 문의하십시오. 어떤 부분.Datacontext.SaveChanges()는 데이터베이스에 원하지 않는 레코드를 추가합니다.

지금은 이미 프로젝트에 있었지만 올바르게 작동하지 않았습니다. 즉, 데이터베이스에 추가 된 데이터가 삭제되지 않았고 삭제되지 않은 상태에서 재 작업하기 전에 코드를 사용했습니다. 아직 배정되지 않았습니다. 현재이 테스트는 제대로 작동하지만 데이터베이스를 실행 한 후에는 추가되지 않아야하는 데이터베이스에 레코드가 남아 있습니다.

여기서 찾을 수있는 코드 http://pastebin.com/YzRqi7dt에서 테스트 방법을 볼 수 있습니다. TestInitialize에 추가 된 레코드는 제대로 삭제되지만 테스트를 마친 후에도 데이터베이스에 4 개의 레코드가 너무 많이 남아 있습니다. 그 중 2 개는 testmethod에 ConexioContacts 사본입니다. 나는 8 개의 연락처가 4 대신에 추가되었다는 것을 디버깅하는 동안 어떤 점에서 알아 차렸기 때문에 사본이라는 것을 알고있다. 데이터베이스에 남아있는 다른 2 개의 연락처는 내 시드() 메소드에서 나온 것처럼 보이지만 씨드 () 메소드가 호출되지 않습니다. 그것은 (디버깅하는 동안 발견) 배경에서 DataContext.SaveChanges() 들어가면

다음은 이러한 4 개 레코드의 추가가

List<Synchronizer<BaseContact, ExternalContact, ConexioContact>.ConexioEntitySyncContext> matches  = 
      Synchronizer<BaseContact, ExternalContact, ConexioContact> 
      .FindMatches(conexioEntities, externalEntities, _unitOfWork); 

동안 일어난다. 위의 방법은 여기에서 찾을 수 있습니다 : http://pastebin.com/t9iMGB31. DataContext.SaveChanges()는 메서드가 끝날 때 UnitOfWork.SaveChanges()에서 호출됩니다.

희망이 분명하다. 그렇지 않다면 물어보십시오. 종류 안부

, Gravinco

편집 : 나는 내 테스트를 실행하지만, 오류가 발생한 이유를 난 아직도 방법 또는 모르는 경우

와이어트 어프가 제안한 거래 누군가 경우, 문제가 해결 이것에 대해 자세히 설명해 주면 매우 감사 할 것입니다.

답변

3

당신이 할 수있는 한 가지는 트랜잭션 내부의 모든 작업을 랩핑하고 작업이 끝나면 롤백하는 것입니다. 이렇게하면 데이터베이스를 변경하지 않아도됩니다. 또한,이

는 테스트 클래스와 TestInit() 방법의 시작 부분에 TransactionScope transaction; 객체를 추가 ... 그것은 아마도 다른 테스트 또는 무언가에서 오는 경우, 문제를 찾을 수 있습니다, 단지 transaction = new TransactionScope()을한다. 그런 다음 CleanTest() 방법의 모든 것을 transaction.Dispose();

+0

으로 대체 할 수 있습니다. 안녕하세요, Wyatt 님, 고맙습니다. 문제는 다른 질문에 기인 한 것이 아닙니다. 질문에 주어진 테스트 만 실행하기 때문입니다. 또한이 레코드를 DataContext에 추가하기 시작하는 줄은 unitOfWork.RepositoryAsync ()입니다. 삽입 (insertConexioEntity); foreach 루프에서. 당신의 제안은 여전히이 경우에 문제를 해결합니까? 아니면 내가 완전히 잘못된 생각을하는거야? – Gravinco

+0

그 행이 (귀하의 pastebin 링크에서) 어디 있는지 알 수 없으므로 확실히 말할 수는 없습니다. 그러나 트랜잭션 내에서 데이터베이스 상호 작용이 모두 발생하는 경우 변경 사항을 데이터베이스에 저장하면 안됩니다. –

+0

내가 언급 한 행은 52 번째 줄에있는 else 절의 끝에 있습니다. 그리고 트랜잭션을 시도해보고 작동하는지 확인하십시오. 나는 계속 너를 게시 할 것이다. – Gravinco