완료하는 데 30 초 이상 걸리는 함수 가져 오기를 사용할 때 Entity Framework (EF)를 사용하여 시간 초과가 발생합니다. 다음을 시도했지만이 문제를 해결할 수 없었습니다.
여기에 제안 된대로 EDMX 파일이있는 프로젝트 Default Command Timeout=300000
의 App.Config 파일에 연결 문자열을 추가 했습니다 .
내 연결 문자열은 다음과 같습니다.
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
내 저장소에서 CommandTimeout을 직접 설정하려고했습니다.
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
EF 시간이 초과되지 않도록하려면 어떻게해야합니까? 이것은 매우 큰 데이터 세트에서만 발생합니다. 작은 데이터 세트로 모든 것이 잘 작동합니다.
내가받는 오류 중 하나는 다음과 같습니다.
System.Data.EntityCommandExecutionException : 명령 정의를 실행하는 중 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오. ---> System.Data.SqlClient.SqlException : 시간 초과가 만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과했거나 서버가 응답하지 않습니다.
OK-나는이 일을했고 바보 일이 일어났습니다. 연결 문자열이 Default Command Timeout=300000
있고 CommandTimeout이 180으로 설정되었습니다 Default Command Timeout
. 연결 문자열에서 연결 문자열을 제거하면 작동했습니다. 따라서 정답은 컨텍스트 객체의 저장소에서 CommandTimeout을 수동으로 설정하는 것입니다.
this.context.CommandTimeout = 180;
연결 문자열에서 시간 초과 설정을 설정해도 영향을 미치지 않습니다.
"
.
NONCLUSTERED
일부 테이블에 인덱스를 추가해야한다는 것을 깨달았습니다 .