5

저는 멀티 패밀리 Asp.Net MVC 3 웹 응용 프로그램을 만들고 DB 모델에 대해 EF4.1 코드를 먼저 사용하고 있습니다.먼저 EF4.1 코드에서 Web.config의 ConnectionString 이름을 재정의하는 방법

개발을위한

내가 App_Data에 SqlServerCE를 사용하는 것이 행복 해요, 생산이 연결 문자열에 대한 기본 코드 첫번째 외모로, 2008 년

내 상황이 "MyModels"라고 말 SQL 서버로 이동합니다 Web.config에서 "MyModels"라고합니다. SQL2008에서 App_Data에있는 파일을 사용하거나 데이터베이스에 액세스하기 위해 변경하라는 메시지가 표시 될 수 있습니다. 지금까지 괜찮아.

멀티 테넌시 때문에 SqlServerCE 파일 이름이 세입자의 고유 ID와 일치하도록하고 싶습니다 (App_Data에는 "client_x.sdf", "client_y.sdf"가 있으므로 SQL Server 2008에는 별도의 데이터베이스가 있습니다.). 나는이 다른 데이터베이스로 이동하는 법을 배울 수 없다.

DbContext에서 상속받은 MyModels을 사용하고 (Web.config의 '자리 표시 자'conn 문자열을 사용하고 "{clientId}"를 고유 ID로 바꾼) 연결 문자열을 제공하려고 시도했습니다. MyModels 생성자의 연결 문자열 :

base.Database.Connection.ConnectionString = xxx; 

그러나 이것은 결코 작동하지 않습니다.

코드, 데이터베이스를 추적 (.!이 내가 생각하는 SQL Server에 연결을 시도 그래서 아직 SqlServerCE를 사용하는 '구성'아니에요 제안 등)

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

: 나는 항상 다음과 같은 오류가 .ConnectionString은 Web.config에서이 시점에서 읽지 않았으므로 검색하고 바꿀 수 없으며 나중에 파이프 라인의 '자리 표시 자'conn 문자열로 덮어 쓰게됩니다.

나는 이것이 아주 분명해야하고 나는 '훅'을 찾을 수 없다고 생각한다. 아무도 도와 줄 수 있습니까?

+0

나는 그것을 알아 냈습니다. 왜냐하면 저는 약간 바보 같기 때문입니다. 죄송합니다! ConnectionString을 Web.config에서 connectionString으로 설정하려고했지만 실제로 DbConnectionStringBuilder를 사용하여 빌드해야합니다. 빌더의 ConnectionString 특성을 바꾼 다음 빌더를 사용하여 EF conn 문자열을 설정하면 작동합니다. 이걸 표시로 해결할 수 있습니다. 제발! –

+3

귀하의 코멘트 내용을 답변으로 작성하여 동의하십시오. –

+0

Ladislav Mrnka가 말했듯이, 당신 자신의 질문에 대답해도 괜찮습니다.나는 당신이 당신의 자신의 대답을 "the"답으로 표시하기 전에 하루 정도 기다려야한다고 믿는다. 그러나 그것은 허용된다;) –

답변

1

나는 그것을 알아 냈습니다. 왜냐하면 저는 약간 바보 같기 때문입니다. 죄송합니다! ConnectionString을 Web.config에서 connectionString으로 설정하려고했지만 실제로 DbConnectionStringBuilder를 사용하여 빌드해야합니다. 빌더의 ConnectionString 특성을 바꾼 다음 빌더를 사용하여 EF conn 문자열을 설정하면 작동합니다.

+2

동일한 오류가 발생합니다. 어떤 부분이 web.config라는 문자열을 만드는 지 보여주는 코드와 그렇지 않은 경우 설정하는 방법은 나에게 많은 도움이 될 것입니다. – jp2code

1

문제를 해결하는 방법이 가능한지 확실하지 않습니다. 제 아이디어는 DbContext 클래스를 인스턴스화하는 정적 "팩토리"클래스를 만드는 것입니다.

public static class MyModelsFactory 
{ 
    public static MyModels CreateMyModels() 
    { 
     string connectionString = string.Empty; 
     // some code to retrieve your connectionString. 
     return new MyModels(connectionString); 
    } 
} 

그리고 당신은 MyModels 클래스를 인스턴스화 할 때마다 당신은 방법 CreateMyModels를 호출 할 수 있습니다 : 코드는 다음과 같다 그것은 경우에 나를 위해 작동

using (MyModels models = MyModelsFactory.CreateMyModels()) 
{ 
    //your code 
} 

나는에 따라 연결 문자열을 변경해야 런타임시 일부 논리. 하지만 내 DbContext 클래스는 코드가 아닌 고전 EF에 의해 자동으로 생성됩니다.

관련 문제