2009-08-20 2 views
4

프로젝트에서 EntityFramework를 사용하여 MySQL 데이터베이스에 연결합니다. 공급자는 Devart Dot.connect입니다.데이터베이스를 변경하는 방법 - Entity Framework (mysql 데이터베이스)에서 사용하는 스키마?

이 응용 프로그램은 런타임에 사용자가 지정한 연결 매개 변수를 사용하여 데이터베이스에 연결해야합니다. 여기에는 물론 MySQL 데이터베이스 이름도 포함됩니다.

사용자 연결 매개 변수를 빌드하고 저장하기 위해 EntityConnectionStringBuiler 및 EntityConnection 클래스를 사용했습니다.

문제는 주어진 매개 변수를 사용하더라도 응용 프로그램이 Visual Studio 마법사를 사용하여 EntityModel을 디자인 할 때 명명 된 데이터베이스에 항상 연결된다는 것입니다. 매우 이상한 점은 ObjectContext의 상태를 디버깅하고 검사 할 때 사용자 정의 연결 매개 변수가 올바르게 사용된다는 것입니다 ... 내게 화를냅니다 !!!!! 실마리가 있습니까?

+0

는 코드 샘플은 helpful- 그것을 않는 것 실제로 * 작업 * 디버깅, 또는 그냥 ObjectContext에 올바른 연결 문자열을 보여? –

답변

9

이 문제로 하루를 보내고 마침내 문제는 model.edmx 파일에서 발생한다는 것을 알게되었습니다.

이 파일에는 EntitySet 당 한 행이 있습니다. 각 EntitySet 요소에는 schema라는 속성이 있습니다. 유형 = "테이블"스키마 = "하여 MyDatabase"

EntitySet 이름 = "annee_civile" EntityType = "openemisModel.Store.annee_civile" 저장소 : SQL 서버의 경우이 속성은 관련 테이블 스키마로 설정 />

당신의 EntityConnection을 소유 constructiong 때 스키마의 이름을 제공하는 경우가 충돌이며 다른 하나를 지정한 경우 그 마지막으로 edmx 파일에 정의 된 스키마에도 사용됩니다 보인다 연결 매개 변수

해결 방법은 단순히 edmx 파일에서 스키마 이름을 제거하는 것입니다. 이것은 SQL 서버에 연결할 때 MYSQL에 대한 것입니다.

EntitySet 이름 = "annee_civile" EntityType = "openemisModel.Store.annee_civile" 가기 : 유형 = "테이블"스키마 = ""/>

EntityConnectionStringBuilder :

string provideString = "사용자 ID = xxxx; 암호 = xxx; 호스트 = xxxx; 데이터베이스 = anydatabasename"; EntityConnectionStringBuilder entityConnBuilder = 새 EntityConnectionStringBuilder(); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @ "res : // /OpenEmisModel.csdl|res:// /OpenEmisModel.ssdl|res://*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = provideString;

의 EntityConnection 그것을 이용한 오브젝트 컨텍스트 :

의 EntityConnection entityConnexionEmis = 새의 EntityConnection (entityConnBuilder.ConnectionString);

objectcontextEntities testingContext = 새로운 objectcontextEntities (entityConnexionEmis);

이제 소프트웨어가 모든 데이터베이스 이름에 연결할 수 있습니다.

희망이 도움이됩니다.

+1

Devart가 dotConnect 제품에 대해이 문제를 해결하길 바랍니다. – mathijsuitmegen

0

프로젝트의 dll Devart.Data.MySql.Entity.EF6.dll을 참조하십시오. 응용 프로그램이 데이터베이스 작업이 수행되기 전에하고, 추가 시작되고

어딘가에 다음

var config = MySqlEntityProviderConfig.Instance; 
config.Workarounds.IgnoreSchemaName = true; 

당신은 참조해야합니다

using Devart.Data.MySql.Entity.Configuration; 
관련 문제