2012-11-29 3 views
0

빠른 질문 :가져 오기의 EntityConnection 문자열

그래서 나는 나의 실체를 초기화 ServiceManager.InitializeContext() 방법에 구성된 연결 문자열을 전달 내가 모든 SQL 로그인 정보를 수집하고 사용이 LogInWindow 대화를 특정 공급자 연결을 사용하는 컨텍스트

모두 정상적으로 작동합니다. 그러나 App.config 구성 파일에 정의 된 값으로 LogInWindow 대화 상자를 초기화하고 싶습니다.

이 초기 설정을 수행하는 기본 방법이 있습니까? 즉, 기본 공급자 연결을 가져 오는 단순한 목적을 위해 기본 생성자를 사용하여 더미 을 인스턴스화해야합니까? "깨끗한"방법이 있습니까?

그런데 Form.Shown 이벤트에 대한 처리기 내에서이 유형의 Form.Close() 호출을 수행하는 것이 안전하다고 생각하십니까? MSDN에서 Form.Load 이벤트에 대한 처리기 안에 Form.Close()을 호출하는 것은 좋지 않다는 것을 읽었습니다.

public partial class MainWindow : Form { 

    private void MainWindow_Shown(object sender, EventArgs e) { 
     using (var logInWindow = new LogInWindow()) { 
      if (logInWindow.ShowDialog(this) == DialogResult.OK) { 
       this.serviceManager.InitializeContext(logInWindow.ConnectionString); 
      } else { 
       this.Close(); 
      } 
     } 
    } 
} 


public sealed class ServiceManager : IDisposable { 

    public void InitializeContext(string connectionString) { 
     if (this.EntityContext != null) 
      throw new InvalidOperationException("EntityContext cannot be initialized multiple times."); 

     var entityConnectionString = new EntityConnectionStringBuilder(); 
     entityConnectionString.ProviderConnectionString = connectionString; 
     entityConnectionString.Provider = "System.Data.SqlClient"; 
     entityConnectionString.Metadata = "res://*/EntityModel.EntityModel.csdl|res://*/EntityModel.EntityModel.ssdl|res://*/EntityModel.EntityModel.msl"; 

     this.EntityContext = new EntityContext(entityConnectionString.ConnectionString); 
     this.EntityContext.ObjectMaterialized += EntityContext_ObjectMaterialized; 
    } 
} 

답변

1

당신은 System.Configuration 클래스를

예를 사용하여의 App.config의 모든 부분에 액세스 할 수 있습니다

var connectString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 

var stringBuilder = new SqlConnectionStringBuilder(connectString); 

string UserID = stringBuilder.UserID; 
string Password = stringBuilder.Password; 
string catalog = stringBuilder.InitialCatalog; 

의 App.config에게

<configuration> 
    <connectionStrings> 
    <add name="MyConnectionString" connectionString="metadata=res://*/........... 
    </connectionStrings> 
</configuration> 
+0

감사합니다. 지금 궁금한데,'ConfigurationManager.ConnectionStrings' 콜렉션은 어떤 타입의 연결을 리턴합니까? 'EntityConnection'? ** 공급자 연결 문자열 **에만 관심이 있습니다. – fernandoespinosa

+0

오, 알겠지만, 그것은 'ConnectionStringSettings'입니다 ... 문제는 그 유형이 연결 문자열을 부분들, 즉 초기 카탈로그, Uset ID, 암호 등으로 분해하지 않는다는 것입니다. 여전히'ConfigurationManager '유용합니다. – fernandoespinosa

+0

나는 당신이하고자하는 것을 정확히하는 응용 프로그램을 가지고 있습니다. 단지 연결 문자열을 분할하여 사용자 이름/암호를 얻습니다. 할 수있는 좋은 방법이있을 수 있지만 나는 그것을하고있는 해키 방법에 아무런 문제가 발견되지 않았다 :) –

관련 문제