0

asp.net 3.5 アプリにローカル データ キャッシュがあります。特に開発中に、ローカル データベースがサーバーと同期しなくなることがあることに気付きました。理由を理解し、次の手順で再現できます。

1- Start the app
2- Make a change
3- Sync changes with server
4- Start the app again, thus forcing the app to use a new copy of 
the local .SDF file.

以前に行った変更は明らかに失われていますが、サーバーと同期すると、それらはプルダウンされません。私の推測では、DB が同期していないことをアプリが検出していない場所があると思います。

私が疑問に思っているのは、サーバーと完全に同期するようにプログラムでアプリに指示する方法があるかどうかです。誰でも知っていますか?

4

3 に答える 3

1

Microsoft フォーラムで得た回答が、問題の解決策になるかもしれません。

主キーをそれ自体に設定して問題のテーブルを更新すると、レコードのバージョンがインクリメントされ、次の同期に含まれます。これを行うには、次のような SQL ステートメントを使用できます。

update MyTable set Id = Id;

シナリオにはいくつかの違いがあることに注意してください。

  1. 私の場合のように、バージョンをインクリメントし、初期化しません。
  2. Compact Edition データベースではなく、サーバーで変更追跡を操作します。

テストしていなくても、この解決策はうまくいくと思います - どうやってうまくいくのか教えてください!

于 2009-12-27T22:46:01.807 に答える
0

コメントで指摘したように、ローカル データベースが頻繁に上書きされる理由はわかりませんが、上書きされ、以前にサーバーに送信された変更が再同期されない場合、問題は最も深刻です。アンカーがサーバーに保存されている可能性があります。クライアント データベースが以前のバージョンに "ロールバック" されたとしても、サーバーはこれを認識せず、実際に確認する方法がありません。

もちろん、同期とアンカー ロジックを実際にどのように実装するかは完全に個人次第なので、問題の詳細を推測することしかできませんが、解決するには、次の 2 つのいずれかを行う必要があります。

  • 使用する開発用クライアント ID のクライアント アンカーをリセットするスクリプトをサーバー上で実行します。また
  • プロジェクト内の SDF のビルド コピー プロパティ (「出力ディレクトリにコピー」) を「コピーしない」に変更して、ローカル データベースが上書きされないようにします。

それが役立つことを願っています。

于 2009-12-27T23:06:22.160 に答える
0

SQL Services の Track Changes Interval オプションが小さすぎると、更新も見逃されます。

たとえば、2 日間設定した場合に変更が発生し、同期試行の 3 日前に変更が発生すると、それらの変更が見逃されます。

上記のようにレコードを変更して更新があることを確認しているときに、各同期テーブルの最後に同期された日付を別の同期テーブルに保存し、そのテーブルを毎回完全にダウンロードすることが最善の方法であることがわかりました。

次に、同期を許可します。

次に、同期によって更新されなかった各テーブルについて、日付が [変更の追跡] 間隔より前かどうかを確認します。そうである場合は、そのテーブルの同期オプションを変更してダウンロードを完了し、再度同期します。

少しかわいそうな、私は知っています...

于 2010-01-24T01:05:02.003 に答える