0
一些簡單的問題:擷取EntityConnection串
所以我有這個LogInWindow
對話框,我用它來收集所有的SQL登錄信息,然後構建連接字符串傳遞給ServiceManager.InitializeContext()
方法,它初始化我的實體上下文與特定的提供者連接。
這一切都工作正常。但我想用App.config配置文件中定義的值初始化LogInWindow
對話框。
有沒有一個首選的方法來做這個初始設置?即,我是否應該使用默認的構造函數實例化一個虛擬的EntityContext
,僅僅是爲了獲取默認提供程序連接的純粹目的?有沒有「更清潔」的方式?
順便說一下,你會認爲這是一種「安全」的做法,在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;
}
}
感謝。現在我很好奇,ConfigurationManager.ConnectionStrings集合返回什麼類型的連接?一個'EntityConnection'?請記住,我只對**提供程序連接字符串**部分感興趣。 – fernandoespinosa
哦,我明白了,它是一個'ConnectionStringSettings' ...問題是,該類型不會將連接字符串分解爲多個部分,即初始目錄,Uset ID,密碼等等......我仍然可以使用'ConfigurationManager 「雖然有用。 – fernandoespinosa
我有一個應用程序,完全按照你要綁定的方式做,我只是分割連接字符串以獲取用戶名/密碼。 有可能是一個更好的方法來做到這一點,但我發現沒有問題,我正在做這個哈克的方式:) –