簡単な質問:
そのため、このLogInWindow
ダイアログを使用してすべての SQL ログイン情報を収集し、構築された接続文字列をServiceManager.InitializeContext()
メソッドに渡します。これにより、エンティティ コンテキストが特定のプロバイダー接続で初期化されます。
それはすべてうまくいっています。LogInWindow
しかし、App.config 構成ファイルで定義されている値でダイアログを初期化したいと思います。
この初期設定を行うための推奨される方法はありますか? EntityContext
つまり、デフォルトのプロバイダー接続を取得するという純粋な目的のために、デフォルトのコンストラクターを使用してダミーをインスタンス化することに頼るべきですか? 「よりクリーンな」方法はありますか?
ところで、イベントForm.Close()
のハンドラー内でこの種の呼び出しを行うことは「安全な」方法だと思いますか? イベントのハンドラー内でForm.Shown
呼び出すことはお勧めできないことを MSDN で読みました。Form.Close()
Form.Load
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;
}
}