0

デスクトップ用の 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 のデータベース エクスプローラーを使用したいと考えています。開発中に接続文字列を絶対パスに変更できると思いますが、展開用に公開する前に、忘れずに相対パスに戻すことを願っています。

最後に、このアプリケーションのアップデートもリリースする必要があると予測しており、不適切に行われた場合、そのようなアップデートによってエンド ユーザーのデータが消去されるのではないかと心配しています。可能であれば、更新をリリースするたびにデータ自体に触れることなく、エンド ユーザーのデータベースのスキーマのみを更新できるようにしたいと考えています。これが不可能である場合、それは許容範囲であり、最初の展開の前に、考えられるすべての構造をデータベースに配置することを確認する必要があります。

要約すると、私の質問は次のとおりです。

  1. VS、デバッグ、およびリリース間で単一の SQL コンパクト データベースを共有する方法は?

  2. データを消去せずにデータベース スキーマを更新するオプション機能を使用して、アプリケーションの展開および更新中にローカル データベースを処理する方法は?

4

1 に答える 1

1

同様のアプリケーションがあり、データベース ファイルを完全に分離しています。ユーザーデータベースを上書きしたくない更新も必要になる場合があるためです。EF 接続が行われる前にデータベース スキーマをチェックするプロセスがあります。そのため、ユーザーがこのアプリケーションをインストールすると、Web サーバーからデータベース ファイルをダウンロードし、コンピューターの特定の場所に配置する必要があります。

于 2013-05-30T15:42:09.963 に答える