デスクトップ用の Visual Studio Express 2012 で ADO.NET Entity Data Model を介してローカルの SQL Server Compact データベースを使用するように WPF プロジェクトをセットアップしました。プロジェクトはうまく機能し、最初の実行時にすべてのデータをロードし、好きなように操作して、後で変更されたデータを元に戻すことができます。
スキーマを少し再構築しているときに、VS に表示されるデータは、データベースの作成時に手動で入力したデータの最初のビットに過ぎないことに気付きました。次回、追加したすべてのデータをコンパイルすると、それ以降はなくなっていました。
掘り下げた結果、アプリのコンパイル済みバージョンは、ファイルの Content:Copy If Newer ビルド アクションによって bin/Debug フォルダーに送信された SDF ファイルを使用しているという結論に達しました。これは、データベースの 4 つの異なるコピー (プロジェクト フォルダー、デバッグ フォルダー、リリース フォルダー、およびエンド ユーザーの PC に展開されたコピー) が心配される可能性があることを意味します。
デバッグ コンパイル バージョンとリリース コンパイル バージョンの両方によってアクセスされる開発マシン上のデータベースの単一コピーと、ClickOnce によってエンド ユーザーの PC にインストールされる VS のデータベース エクスプローラーを使用したいと考えています。開発中に接続文字列を絶対パスに変更できると思いますが、展開用に公開する前に、忘れずに相対パスに戻すことを願っています。
最後に、このアプリケーションのアップデートもリリースする必要があると予測しており、不適切に行われた場合、そのようなアップデートによってエンド ユーザーのデータが消去されるのではないかと心配しています。可能であれば、更新をリリースするたびにデータ自体に触れることなく、エンド ユーザーのデータベースのスキーマのみを更新できるようにしたいと考えています。これが不可能である場合、それは許容範囲であり、最初の展開の前に、考えられるすべての構造をデータベースに配置することを確認する必要があります。
要約すると、私の質問は次のとおりです。
VS、デバッグ、およびリリース間で単一の SQL コンパクト データベースを共有する方法は?
データを消去せずにデータベース スキーマを更新するオプション機能を使用して、アプリケーションの展開および更新中にローカル データベースを処理する方法は?