2009-12-04 2 views
4
이 코드는

엔티티 프레임 워크 및로드 테스트

를 실패하는 이유는 이해하기 힘든 시간을 보내고 있어요

나는 시험 방법 여기

IUnitOfWork unitofwork = EFUnitOfWork.CreateInstance(); 
IRepository<InformationRequest> informationRequestRepository = unitofwork.CreateRepository<InformationRequest>(); 
IEnumerable<InformationRequest> requests = informationRequestRepository.ToList(); 
unitofwork.Dispose(); 

EFUnityOfWork.CreateInstance calls the EFUnitOfwork Constructor 
public EFUnitOfWork() 
    { 

    _currentContext = new MyDataContext(); 
    } 

이 CreateRepository

public IRepository<T> CreateRepository<T>() 
{ 
    return new Repository<T>(_currentContext); 
} 

의 코드가 위의 테스트는 부하 테스트에서 작동하지 않습니다. 내가 그것을 실행하려고하면 System.Data.EntityException가 : 기본 공급자가 열려있는 실패했습니다. --->System.InvalidOperationException : 연결이 닫히지 않았습니다. 연결의 현재 상태가 연결 중입니다.

저는 매번 컨텍스트를 삭제하고 새로운 컨텍스트를 작성합니다. 나는 어디서 잘못 될지 이해하지 못합니다.

+0

우리는 EFUnitOfWork.CreateInstance() 내의 whats를 알아야합니다. – jfar

+0

비슷한 문제가 있습니다. –

+0

저도 같은 문제가 있습니다. – CountZero

답변

2

코드 EFUnitOfWork.CreateInstance()은 정적 방법입니다.

두 스레드가 동시에 이것을 호출하면 동일한 컨텍스트를 다시 가져올 수 있습니다. 그러면 당신은 당신이 보는 오류를 얻을 수 있습니다.

한 번에 하나의 스레드에서만 호출되도록 잠금으로써 수정할 수 있습니다. 하지만 시간이 지남에 따라 성능 병목 현상이 발생합니다.