1

特定のエンティティを取得するために、コンテキストに対してクエリを実行するとします。

ここで、データベース内の対応する行 (エンティティと SQL テーブルの間の 1 対 1 のマッピングでシンプルにしましょう) がエンティティの作成以降に変更されたかどうかを知る最良の方法を見つけたいと思います。

TimeStamp 列を使用して、次のように、エンティティが古くなっているかどうかを知りたい単純なクエリをそれぞれ実行することを考えました。

var uptodate = (from e in context.mySet
                where e.TimeStamp == entityTimeStamp
                select e).Any();

TimeStamp 列にインデックスを付けることで、手っ取り早い方法だと思いますが、残念ながらインターネット上で確認が見つかりませんでした...

4

3 に答える 3

1

テーブルを変更せずにこれを行う方法を探している場合は、CHECKSUMコマンドを使用して、マッピングに追加の列を (おそらくビューとして) 追加できます。これにより、データベースに新しい列を追加することを心配する必要がなくなります。

このようなものが動作するはずです:

select *, 
    BINARY_CHECKSUM(*) as CheckSumValue
from test WITH (NOLOCK);

ここにいくつかのサンプルfiddleがあります。

そうは言っても、テーブルに ModifiedDate フィールドがある方が望ましい場合があります。その場合は、変更を確認する最良の方法です。

幸運を。

于 2013-01-17T23:38:07.767 に答える
0

TimeStamp とクエリを使用してさらにテストと調査を行った後、それがまだ同じかどうか (より正確には、指定された値がまだテーブルにあるかどうか) を確認するのが最善の方法のようです。

このようなメカニズムでは、最高のパフォーマンスを確保するために TimeStamp 列にインデックスが必要です ((O(n) ではなく、おおよそ O(Log(n)))。

于 2013-01-23T10:16:55.917 に答える