0

ユーザーがデータ ソースをダイアログに入力できるようにしようとしています。それをアプリケーションの app.config に書き込んでいます。私が問題を抱えているシナリオは次のように機能します。

1) ユーザーがダイアログにデータ ソースを入力すると、ダイアログが接続文字列を追加または更新します。このシナリオでは、ユーザーが最初に間違ったデータ ソースを入力しました。

2)次に、ユーザーがEFコード(接続文字列を初期化する)を含むダイアログを開くと、EFは接続できないという例外をスローします。

3) ユーザーが元のダイアログに戻り、正しいデータ ソース名を入力すると、app.config が再び更新されます。

4) ユーザーは、EF コードをトリガーするダイアログを再度開きます。EF には、app.config では正しいが、まだ古いデータ ソースが残っています。

ConfigurationManager.RefreshSection("connectionStrings") を試しました。

MyEFContainer.Database.Initialize() も実行してみました。

どちらも機能していないようです。ユーザーが強制的にアプリを閉じて再度開くことなく、EF に接続文字列データを更新させるにはどうすればよいですか? 彼らがそれをすれば、それはうまくいきます。

4

3 に答える 3

0

接続文字列が修正された後、DbContext クラスの新しいインスタンスをインスタンス化していますか? 最初に失敗した DbContext インスタンスを再利用すると問題が発生します。

于 2013-03-25T20:34:25.427 に答える
0

私は常にメモリ内の接続文字列で作業します。たとえば、コンテキストファクトリに保管してください。最初は構成ファイルから読み取りますが、新しいものに置き換えられる場合があります。アプリケーションの次の実行のために、新しいものを app.config に保存します (有効な場合)。

于 2013-03-25T20:19:44.447 に答える
0

とりあえず、EF に app.config を強制的にリロードさせようと思います。app.config を変更した後、

 ConfigurationManager.RefreshSection("xxx")

は EF では機能しないため、アプリケーションを再起動する必要があります。

この問題を解決する最善の方法: app.config に接続文字列がありません。

自動移行と、同じコンテキストを使用する 2 つのデータベースを使用します。実際のランタイムが提供する接続。アプローチ

于 2014-11-21T07:06:53.547 に答える