20

for ETag in ITableEntity MSDN によると: エンティティの現在の ETag を取得または設定します。更新操作の一部としてエンティティを盲目的に上書きするには、この値を「*」に設定します。

このプロパティの目的を理解できません。このプロパティを使用できる理由と時期を説明してください。

4

2 に答える 2

41

ETag はタイムスタンプではないか、少なくともそうではありません。レコードが最後に更新されたときを示す別の Timestamp プロパティがあります。ETag は同時実行に使用されます。テーブル エンティティを読み込んで更新する場合は、値を読み込んだときから ETag を更新するために渡します。その ETag が格納されているものと一致する場合にのみ、エンティティが更新されます。

なんで気にするの?複数のユーザーがフォーム上の同じ項目を同時に編集している場合、1 人のユーザーの変更が他のユーザーを上書きすることは望ましくありません。2 番目のユーザーは、データを読み込んでから変更されたデータを上書きしていることを通知されます。 .

例: ユーザー 1 とユーザー 2 が同時に編集ページを読み込みます。ユーザー 1 がフィールド 1 の値を変更し、アイテムを保存します。ユーザー 2 がアイテムを開いた後、ユーザー 2 は関連のないフィールド 2 を変更し、無意識のうちに古いフィールド 1 が更新されて保存されています。ユーザー 2 は、ユーザー 1 による変更を破棄していることを、あなたが言わない限り知りません。したがって、ユーザー 1 が既に変更したというエラーを表示し、ユーザー 1 の変更を上書きするかどうか、またはそれらの変更を最初に確認するかどうかを確認する必要があります。

これは、ユーザー 1 とユーザー 2 の両方が、フォーム表示に非表示でレコードが読み込まれたときの ETag を保存することによって実現されます。各ユーザーが保存を試みるときに、その ETag を更新されたデータと共にサーバーに渡すことができます。これは、ユーザー 2 が古いレコードを変更していることをどのように示していますか? レコードが変更されるたびに、そのレコードに保存されている ETag が更新されるためです。そのため、ユーザー 2 が送信した ETag を保存しようとすると、変更が一致しなくなり、Azure が通知するので、何をすべきかを処理できます。

ユーザー 2 がユーザー 1 の変更を上書きしてもかまわない場合は、保存で "*" を渡すと、ETag が一致しない場合に Azure でエラーが発生しなくなります。

于 2015-01-31T02:25:05.787 に答える