MySQL이 포함 된 엔티티 프레임 워크 - 모델을 생성하는 동안 시간이 만료되었습니다.
-
19-09-2019 - |
문제
MySQL에 데이터베이스를 구축했으며 Entity Framework와 함께 매핑하려고 시도하지만 EF 컨텍스트에 약 20 개 이상의 테이블을 추가하려고 할 때마다 "GeneratessdleXception"으로 실행되기 시작합니다.
'microsoft.data.entity.design.visualstudio.modelwizard.engine.modelBuilderEngine+GeneratesSdlexception'유형의 예외는 데이터베이스에서 업데이트를 시도하는 동안 발생했습니다. 예외 메시지는 다음과 같습니다. '명령 정의를 실행하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오. '
명령 실행 중에 치명적인 오류가 발생합니다.
시간 초과가 만료되었습니다. 작업이 완료되기 전에 경과하거나 서버가 응답하지 않습니다.
영향을받는 테이블에는 특별한 것이 없으며, 같은 테이블이 아닙니다. 특정 (특정) 수의 테이블이 추가 된 후에는 "시간 초과 만료 된"오류없이 컨텍스트를 더 이상 업데이트 할 수 없다는 것입니다. 때로는 단 하나의 테이블이 남았으며 때로는 세 개입니다. 결과는 예측할 수 없습니다. 또한 오류 전에 추가 할 수있는 테이블 수의 차이는 아마도 문제가 기존 테이블 정의를 포함하는 컨텍스트를 업데이트하기 위해 생성되는 쿼리 크기와 새로운 테이블의 크기에있을 수 있습니다. 그것에 추가되고 있습니다. 기본적으로 SQL 쿼리가 너무 커지고 어떤 이유로 든 실행되지 않습니다.
모델을 생성하면 edmgen2 오류없이 작동하지만 생성 된 EDMX 파일은 위에서 언급 한 예외를 생성하지 않고도 Visual Studio 내에서 업데이트 할 수 없습니다.
모든 우연히이 문제의 원인은 edmgen2가 잘 작동한다는 점을 감안할 때 Visual Studio 내 도구에 있습니다. 그러나 다른 사람들 이이 독특한 문제에 접근하는 방법에 대한 조언을 제공 할 수 있기를 바라고 있습니다. 나는 그것을 경험하는 유일한 사람이 아닙니다.
동료가 제공 한 한 가지 제안은 일부 테이블 크로스 오버가있는 두 개의 개별 EBMX 파일을 유지하는 것이었지만 제 생각에는 꽤 추악한 수정처럼 보입니다. 나는 이것이 "새로운 기술"을 사용하려고 노력하는 것이라고 생각합니다. :(
해결책
나는 오후 내내이 문제에 대해 두통을 겪었습니다. 그러나 EF Desinger 연결이 '기본 명령 타임 아웃 = 300000;'로 존재하는 app.config 또는 web.config에서 문을 추가 할 수있는 솔루션을 찾았습니다. 문제가 사라졌습니다.
다른 팁
위의 조언은 정확하지 않습니다.
Default Command Timeout
변경 해야하는 유일한 연결 문자열 매개 변수입니다. Connect Time
처음에 연결을 받기 위해 기다릴 시간을 규제합니다. 그것은 당신의 문제가 아닙니다.
Default Command Timeout
Connector/Net 6.3.4와 연결 문자열에 영향을 미치지 않는 것으로 보입니다. 나는 이것이 커넥터/네트의 버그라고 생각하고 나는 버그 보고서 오라클과 함께. 편집 :이 버그는 MySQL 개발자에 의해 인정되었으며 2010 년 10 월 13 일 기준으로 수정되었습니다. 고정은 6.0.8, 6.1.6, 6.2.5 및 6.3.5로 배치되었습니다.
내가 이것을 둘러싼 유일한 방법은 ObjectContext
사물 CommandTimeout
Null 이외의 다른 것에 대한 속성. NULL이라면 MSDN 당 "기본 제공 업체"의 값을 사용해야합니다. null이 아닌 경우 시간 초과 전에 몇 초 동안 권위있는 가치입니다.
예를 들어:
var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;
체크 아웃 :
http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-o-confidence/
죄송합니다. 방금이 링크가 이미 게시되었다는 것을 깨달았습니다! 죄송합니다
또한 "동료가 제공 한 한 가지 제안은 일부 테이블 크로스 오버로 두 개의 개별 EBMX 파일을 유지하는 것이 었습니다"라고 생각합니다.
못 생겼지 만 작동해야합니다!
너희들은 문제를 쉽게 고치는 방법을 설명하지 않는 약이 약하다 :
- 모든 데이터 연결을 삭제하십시오
- 최신 MySQL 커넥터 (6.3.x) 다운로드
- Visual Studio 열기> 끊기 탐색기> 마우스 오른쪽 버튼을 클릭하십시오. "데이터 연결"> 연결 추가
- MySQL 데이터베이스 공급자를 선택하십시오
- 연결 세부 정보를 입력하십시오
- "Advance"를 클릭하십시오.
- Connect Time Out을 찾아 30,000과 같은 것으로 만드십시오.
- 기본 명령 타임 아웃을 찾아 30,000과 같은 것으로 만드십시오.
모든 것을 저장 한 다음 EF 모델을 다시 시도하고 업데이트하십시오. 나는 이것을 EF 4.0 및 VS2010으로 테스트하여 그것이 작동한다는 것을 알고 있습니다.
위의 모든 솔루션을 모두 사용하지 않았습니다. MySQL (6.3.6) 용 최신 .NET 커넥터를 다운로드했는데 문제가 사라졌습니다.
노력하다 MySQL 용 DotConnect ~와 함께 엔티티 개발자.
우리는 도구에서 모델 생성 프로세스를 약간 개선했습니다. ADO.NET 엔티티 프레임 워크 모델과 유사한 프로젝트에 DevArt 엔티티 모델을 추가 할 수 있지만 약간의 개선 사항이 있으며 타임 아웃 문제가 없습니다.
두 가지 가능성이 떠오르고 있습니다.
먼저 EF 버전 1 (.NET 3.5 SP 1과 함께 배송)이라는 것입니다. 보다 이것 그리고 이것.
다른 하나는 이것이 잘못된 유형의 통화가 사용 된 SQL Server와 Pre-ODBC 드라이버 (1991 년경)에서 얻은 것과 거의 같은 증상과 비슷하다는 것입니다. 한 종류는 쿼리 리턴 결과 (쿼리 리턴 결과)와 함께 사용됩니다 (select
), 그리고 진술의 다른 것 - 결과를 반환하지 않음 (create table
). 결국 연결은 선택 결과를 해당 쿼리와 일치 시키려고 노력하지 않도록 희망적으로 동기화되지 않았습니다. (그 당시에는 죽음의 블루 스크린 존재하지 않았다 : 컴퓨터는 대신 자발적으로 재부팅하는 경향이있다.)
테이블 생성, 생성 된 구조 확인, 새 열 추가, 행을 채우고, 채워진 후 행 내용을 확인하거나 검증 한 후 도구가 연결 모드를 혼동하는지 궁금합니다. 이것이 원인이라면, 일련의 연산에 대해 "더 순수한"상태로 피할 수 있습니다. 완전한 테이블을 만듭니다. alter table
새 열을 추가합니다.