1

방금 ​​ASP.NET MVC 4 & WebAPI 프로젝트를 만들었습니다. 그 후 .edmx 데이터 소스를 프로젝트에 추가했습니다.엔티티 프레임 워크 : 동일한 스키마를 가진 다중 DB

동일한 스키마를 가진 여러 데이터베이스가 있습니다. 동적으로 나는 EF에서 제공되는 기본 생성자를 사용하여 연결 문자열을 교체하려고합니다.

하지만 Model1.Designer.cs에서 "이미 서명 된 동일한 서명의 회원"과 같은 오류가 발생할 때마다

이 문제를 해결할 수 없습니다.

+1

VS에서 문자열 매개 변수를 사용하는 생성자로 컨텍스트를 생성하지 않습니까? –

답변

2

예, 작동합니다. 변경할 사항은 connection string입니다.

그리고 난 단지 내 자신의 호기심을 충족시키기 위해 그것을 테스트했습니다.

다음은 내가 취한 조치입니다. 1. existing databasecreate a model을 가져 가십시오.
2. 빈 데이터베이스를 새로 만듭니다.
3. SQL Management Studio에서 첫 번째 데이터베이스 -> 작업 ->Export Data을 마우스 오른쪽 단추로 누릅니다. 모든 데이터를 새로 생성 된 데이터베이스로 내 보냅니다.
4. 두 번째 데이터베이스에서 일부 레코드를 제거하십시오.
5. 쓰기 코드 :

TMS_MiscEntities db = new TMS_MiscEntities(); 
    TMS_MiscEntities dbCopy = new TMS_MiscEntities(); 
    dbCopy.Database.Connection.ConnectionString = db.Database.Connection.ConnectionString.Replace("initial catalog=TMS_Misc", "initial catalog=TMS_Misc_new"); 

    Response.Write(string.Format("DB 1 records: {0}<br/>", db.ZipCodes.Count())); 
    Response.Write(string.Format("DB 2 records: {0}<br/>", dbCopy.ZipCodes.Count())); 

6. 결과 :

DB 1 records: 869164 
DB 2 records: 868709 

7. 작동하는지 :) 결론

이 내 연결 문자열 모습입니다 :

<add name="TMS_MiscEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ws2008;initial catalog=TMS_Misc;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
+0

나는 분명히 내일까지 그것을 시험 할 것이다. 그것이 작동하지 않는다면 나는 내 시나리오를 알게 될 것이다 .... 대답에 대한 감사. – micronyks

+0

작동하지 않습니다. 나는 EF6를 사용하고있다. dbCopy.Database.Connection.ConnectionString ..... .Database를 확인할 수 없습니다. 거기에 오류가 표시됩니다. – micronyks

+0

무슨 에러가 있습니까? 또한 데이터베이스 스키마가 실제로 동일합니까? 새로 생성 된 데이터베이스로 기존 데이터베이스를 내보낼 수 있습니까? –

1

저는 Entity Framework 6.1.3을 사용하고 있습니다. 문자열 매개 변수를 사용하는 DbContext에 생성자를 추가했습니다. 이 문자열은 App.config에 저장된 연결의 이름이거나 전체 연결 문자열 일 수 있습니다. 이런 식으로 뭔가 : 내 경우

public partial class MyDBContext : DbContext 
{ 
    public MyDBContext(string connectionString) 
     : base(connectionString) 
    { 
    } 

    // DbSets, OnModelCreating, etc 
} 

, 나는 멀티 테넌트 (multi-tenant) 응용 프로그램을 관리하고 나는 적절한 연결 문자열을 구축하고 내 초기화 컨텍스트를 반환하는 ContextFactory를 사용합니다.

public class ContextFactory 
{ 
    public MyDbContext GetContext() 
    { 
     string connectionString; 
     // do some stuff here 
     return new MyDbContext(connectionString); 
    } 
}