2011-02-23 4 views
3

구성 변경을 통해 SQL Server 및 SQL Server Compact Edition간에 데이터 공급자를 전환 할 수 있기를 기대했습니다.구성에서 Entity Framework 공급자 변경

<edmx:StorageModels> 
<Schema ... Provider="System.Data.SqlClient" ... 

가의 app.config 또는 런타임시 공급자를 지정하기 위해 어떤 방법이 있나요 :하지만 내가 왜 볼 수있다 생각 EDMX 파일에서 작업 찾고 나던?

답변

2

Storage-Model은 특정 공급자와 연결되어 있으므로 Entity Framework에서 지정된 공급자와 호환되지 않는 DbConnection 구현을 거부하게됩니다.

Entity Framework 연결 문자열을 보면 StorageSchema, ModelSchema 및 Mapping이 세 가지 파일 (.edmx에서 생성되고 어셈블리에 포함 된 파일)에서 지정되었음을 알 수 있습니다. .edmx를 분해하고 .ssdl, .csdl 및 .msl을 직접 포함하고 SQL Server CE 용 .ssdl을 새로 만들 수 있습니다. 기본적으로 &을 붙여 넣기하고 공급자 및 일부 열 유형을 바꿉니다.

나는 여기에 대해 쓴 : 단위 테스트에 대한 Comparison Entity Framework

1

내가 스키마 이런 식으로 (주 코드 실행 전에 SSDL 변경)을 변경합니다.

var s = Assembly.GetExecutingAssembly().GetManifestResourceStream("Model1.ssdl"); 
    var ssdlFilePath = "<some-dir>\file1.ssdl"; 
    using (var file = File.Create(ssdlFilePath)) 
    { 
     StreamUtil.Copy(s, file); 
    } 
    var str = File.ReadAllText(ssdlFilePath); 
    str = str.Replace("old provider token", "ProviderManifestToken=\"4.0\""); 
    str = str.Replace("old provider type"", "Provider=\"System.Data.SqlServerCe.4.0\""); 
    File.WriteAllText(ssdlFilePath, str); 

의 app.config에서 :

<connectionStrings> 
    <add name="Database2Entities" connectionString="metadata=res://*/Model1.csdl|<some-dir>\file1.ssdl|res://*/Model1.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database1.sdf&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

그것은 작동)

코드에서