2011-09-15 2 views
4

여기에 대해 여러 게시물을 보았지만 응답에서 사용 가능한 솔루션을 만들 수 없었습니다. 아마도 이해 부족 때문일 수 있습니다.EF 4.1/DbContext 환경을 기반으로 연결 문자열을 전환하십시오.

제공되는 호스팅에서는 연결 문자열을 포함하여 준비 및 프로덕션에 동일한 코드 기반을 사용해야합니다.

어떻게 DbContext에 대한 연결 문자열을 전환합니까?

은 내가 이런 식으로 뭔가를 할 수 이해 :

public FooEntities() : base("ApplicationServices") { } 

을하지만이 동적이지 - 그것은 단지 런타임에 설정합니다.

그래서 실제로 런타임에 연결 문자열을 어떻게 선택하겠습니까? ObjectContext

에서 상속

+0

응용 프로그램에서 모든 연결 문자열을 하드 코딩해야하거나 응용 프로그램을 처음 실행하기 전에 실행할 구성 섹션이 있어야한다는 의미입니까? –

+0

web.config에 연결 문자열이 여러 개있는 것이 좋습니다. 작동하는 모든 것에 만족합니다. – Pete

답변

5

public FooEntities() : base("ApplicationServices") { }

FooEntities 또한 다음

public FooEntities() : base(YourStaticMethodToGetConnectionString()) { } 

당신이 설정 일부 환경을 기반으로의 Web.config에서 연결 문자열을 당겨 수 쓸 수

+0

이 제안은 예기치 않은 클라이언트 요구 사항을 충족시키기 위해 내 베이컨을 저장하는 것입니다. 고맙습니다! – awied

0

지금은 로컬을 개발하고 배포 할 것이므로 지금 검토하고 있습니다. 구름에. 따라서 데이터 컨텍스트에서 사용중인 연결 문자열을 동적으로 전환하려고합니다.

public partial class MyApplicationDbContext : DbContext 
{ 
    public MyApplicationDbContext() 
     : base("name=cloud") 
    { 
     Database.Connection.ConnectionString = 
      ConnectionStringHelpers.GetHostBasedConnectionString(); 
    } 

    // abbreviated.. 
} 

대체 :

public partial class MyApplicationDbContext : DbContext 
{ 
    public MyApplicationDbContext() 
     : base(ConnectionStringHelpers.GetHostBasedConnectionString()) 
    { 
    } 

    // abbreviated.. 
} 

도우미 :

내 계획의 Web.config의 섹션 표준 "connectionStrings"에서 필요한 연결 문자열을 구성한 다음처럼 DbContext의 생성자에서 논리를 배치하는 것입니다

<connectionStrings> 
    <add name="local" connectionString="..." providerName="System.Data.SqlClient" /> 
    <add name="cloud" connectionString="..." providerName="System.Data.SqlClient" /> 
</connectionStrings> 
,369 :
public class ConnectionStringHelpers 
{ 
    public static string GetHostBasedConnectionString() 
    { 
     return GetConnectionStringByName(GetHostBasedConnectiongStringName()); 
    } 

    public static string GetHostBasedConnectiongStringName() 
    { 
     switch (System.Net.Dns.GetHostName()) 
     { 
      case "myHostname": return "local"; // My local connection 
      case "ip-ABCD123": return "cloud"; // Cloud PaaS connection 
      default: return "cloud"; 
     }   
    } 

    public static string GetConnectionStringByName(string name) 
    { 
     return ConfigurationManager.ConnectionStrings[name].ConnectionString; 
    } 
} 

그리고 내 Web.config 파일에

관련 문제