0

솔루션에서 두 개의 DAL이 있습니다. 각각은 다른 서버에 액세스합니다.런타임 중에 엔터티 프레임 워크 컨텍스트를 변경하십시오.

첫 번째 서버/데이터베이스에는 데이터베이스 이름을 제공 할 테이블이 있습니다.

var db = "db_1"; // can be db_1, db_2, db_3, etc. 

두 번째 서버에는 쿼리 할 필요가있는 동일한 테이블이 포함되어 있습니다.

db 값에 따라 컨텍스트를 동적으로 전환 할 수 있어야합니다. 올바른 컨텍스트를 반환하거나 사용하는 비즈니스 계층에 db var 전달할 수 싶습니다.

+0

컨텍스트 팩토리 메서드와 비슷하게 들립니다 (초기 열 값을 가져와 결과에 따라 컨텍스트를 반환 함). –

+0

두 컨텍스트 모두 동일한 모델을 사용합니까? – Shoe

+0

브래드 크리스티 (Brad Christie) - 자세히 설명해 주시겠습니까? 나는이 기술에 상당히 새롭다. – user1143687

답변

0

두 가지 모델을 만들 수 있습니다. 하나는 데이터베이스 이름을 제공하는 테이블을 포함하는 데이터베이스이고 다른 하나는 다른 데이터베이스를위한 테이블입니다.

db 첫 번째 방법을 사용하는 경우 컨텍스트 개체가 기본 연결 문자열로 만들어집니다. 이 부분 클래스이므로 런타임에 당신이 첫번째 상황에서 가져온 서버/데이터베이스의 연결 문자열을 전달합니다 곳입니다

public partial class MyContext 
{ 
    public MyContext(string nameOrConnectionString) : base(nameOrConnectionString) 
} 

...과 같이 연결 문자열을 가지고 그것을 확장 할 수 있습니다. 이런 식으로 뭔가는 ... 모양을

... 
using(var dbNameContext = new DatabaseNameContext()) 
{ 
    var dbName = dbNameContext.DBNames.FirstOrDefault(dbn => dbn.Name == "db1"); 
    var connectionString = "metadata=res://*/Database..." + dbName.Name; 
    using(var dbContexts = new MyContext(connectionString)) 
    { 
     var MyDataList = dbContexts.Data.ToList(); 
    } 
} 

은 물론 연결 문자열이 자신처럼되고 수정하고 연결 문자열에 속하는 DBNAME을 배치해야합니다 것입니다.

모델이 정확하도록 다른 데이터베이스에있는 서로 다른 테이블을 모두 동일하게 유지할 계획을 가지고 있어야합니다. 그렇지 않으면 RTE가 생깁니다.

관련 문제