ADO.NET Data Servicesで「latestsの項目を変更します」を実装する方法?
-
05-09-2019 - |
質問
複数のユーザーが、変更から削除し、同時にに追加できることを私は(例えば、TODO項目のリストを)エンティティのリストを持っていると言うことができます。
だから、同期のすべてのクライアントの間で記載されているがmaintaneし、私は、各クライアント(AJAXがベース)は、変更ごとにXX秒をお願いしたいと思います。リストはveeery長く得ることができますので、私は完全な要求を毎回やりたいが、唯一の変更アイテム(アイテムは、更新、削除、または新しいことができます)を要求しません。
これは、ADO.NET Data Servicesで可能ですか?もしそうなら、私は、サーバー上のエンティティフレームワークを使用している場合、どのように私は、それを実装していますか?
私は変更操作がデータサービスに送信されたときの変化の項目を格納し、特定のクライアント最後の要求以降の最新の変更を返すカスタムWebメソッドを持つようにASP.NETsキャッシュを使用すると考えられている(要求を追跡することができ)クライアントASP.NETsセッションオブジェクトを介して。しかし、私は結果セット内の個々の項目(例えば、削除または更新または挿入)の変化状態を示すために、どのようには考えている。
クライアントがサーバーに同じ往復で多くの企業の変更を依頼するために、偉大な解決策は、それが可能になるだろう。
任意の入力がはるかにappreaciatedされます。
よろしく、エギルます。
解決
私の心にスプリング方法は、テーブルのための世代番号を使用することです。それに関連付ける(精神的に)グローバルおよび永続世代番号変数をTODOテーブルに世代と呼ばれる列を与えると。 (DB内のテーブルでこれを入れておそらく最高)。
更新または挿入は、世代番号が増分され、更新または挿入されたレコードの世代番号の欄に入れて行われるたびます。
レコードは最初のDBから読み出されたウェブページに置かれている場合、現在の世代番号も検索され(すなわち、JavaScript変数に入れて)ローカルにキャッシュされています。駆動後続のAJAXは、フィルタローカルにキャッシュされた世代の数よりも多い世代番号を持つレコードのみをwhere句を使用して読み取ります。これが唯一の新しい更新および削除が取得される保証します。ローカルにキャッシュされた世代番号が、その後更新されます。
削除は少しトリッキーです。それを行うための一つの方法は、限られた期間の墓石削除されたレコードにあり、21分は言います。あなたは墓石と呼ばれるビット列と日時の列を持っています。レコードが削除されたときにカラムが世代番号インサートと同じ方法で設定または削除いた、墓石ビットが設定され、日時をのGetDate()を使用して現在の時刻に設定されています。クライアントのAJAX要求は、墓石フラグを設定してレコードを選択して、クライアント側のリストから削除することができます。すべての20分のフルページの更新、またはそれぞれ、すべてのレコードを取得するAJAX呼び出した後、その後、施行されていることをDBジョブは毎分実行し、クリーンアップすることができますように、クライアント(すなわち、削除)廃棄古いレコードより20をコード化している場合分ます。
EDIT:あなたが実際に個別に生成列以上の世代番号、あなたができるSQL関数MAXを永続化する必要はありません。