EntityFramework4.1コードファーストアプローチを使用してデータを管理するデスクトップWPFアプリケーションがあります。
EFはApp.configファイルに接続文字列を追加しますが、実行時にこの接続文字列を変更することはできません。
シナリオは次のようになります。
アプリケーションをデプロイすると、App.configファイルにデフォルトの接続文字列が含まれます。ユーザーがアプリケーションを実行し、接続文字列がユーザーにとっておそらく無効になるため(サーバー名、ユーザーID、およびパスワードのため)、サーバー構成ウィンドウを表示します。
ここで、ユーザーは自分の接続に関する有効な情報を入力し、[OK]を押します。その後、App.configファイルを変更して、ユーザーの新しい有効な情報をファイルに保存できるようになります。
問題:
ConfigurationManagerを使用して変更すると、変更は一時的なものになります。つまり、ファイルは保存されず、変更はメモリに行われます。
App.configファイルをストリームに読み込み、メモリに必要な変更を加え、物理ファイルを削除し、メモリストリームをApp.configとして再度保存すると、WindowsはProgramFilesフォルダーの下のファイルに変更を加えることができません。
ここでの最善のアプローチは何でしょうか?
編集:再び問題!
この方法でApp.configファイルを変更した後:
private void ApplyChangesToConnectionString()
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["SomeUniqueName"].ConnectionString = GetChangesAppliedConnectionString(connectionStringsSection.ConnectionStrings["SomeUniqueName"].ConnectionString);
config.Save(); // This line throws an exception
ConfigurationManager.RefreshSection("connectionStrings");
}
config.Save();
メソッド呼び出しはエラーをスローします
「「C:\ ProgramFiles(x86)\ MyCompany \ MyApp\MyApp.exe.config」へのアクセスが拒否されました。」
「プログラムファイル」の下のファイルは不変であることを知っていますが、これをどのように処理できますか?