0

簡単な質問:

そのため、この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;
    }
}
4

1 に答える 1

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>
于 2012-11-29T00:36:15.033 に答える