Что такое ETag в ITableEntity?
для ETag в ITableEntity MSDN говорит:
Получает или задает текущий объект ETag. Установите это значение в '*', чтобы вслепую перезаписать объект как часть операции обновления.
Я не могу отказаться от цели этого свойства, объясните, почему и когда мы можем использовать это свойство.
Ответы
Ответ 1
Значение ETag - это метка времени сущностей. Вы можете прочитать свойство ETag в событии ReadingEnitity.
void OnContextReadingEntity(object sender, ReadingWritingEntityEventArgs e)
{
string eTag = e.Data.FirstAttribute.Value;
}
Для получения дополнительной информации см. обсуждение по следующей теме Как использовать временную метку или таблицу Etag для таблицы таблиц Windows
Ответ 2
ETag - это не метка времени или, по крайней мере, не больше. Существует еще одно свойство Timestamp, которое было когда последняя запись была обновлена. ETag используется для concurrency. Если вы загружаете объект таблицы и хотите его обновить, вы переходите на обновление ETag с момента загрузки значения, и оно обновляет объект только в том случае, если этот ETag соответствует тому, что хранится.
Почему вас это волнует? Хорошо, если у вас есть несколько пользователей, которые одновременно редактируют один и тот же элемент в форме, вы не хотите, чтобы один пользователь менял, чтобы перезаписать другого пользователя, если второй пользователь не был уведомлен о том, что они переписывают данные, которые были изменены с момента их загрузки.
Пример: пользователь 1 и пользователь 2 загружают страницу редактирования одновременно. Пользователь 1 изменяет значение для поля 1 и сохраняет элемент. После того, как пользователь 2 открыл элемент немного дольше, пользователь 2 вносит изменения в несвязанное поле 2, и неосознанно устаревшее поле 1 сохраняется с их обновлением. Пользователь 2 не знает, что они отбрасывают изменение пользователем 1, если вы не скажете им. Итак, что вы должны сделать, это показать ошибку, которую пользователь 1 уже изменил, и уверены, что они хотят перезаписать изменения пользователя 1 или если они хотят сначала просмотреть эти изменения.
Это выполняется как пользователем 1, так и пользователем 2, хранящим ETag, когда запись была загружена скрытой на дисплее формы. Когда каждый пользователь пытается сохранить, вы можете передать этот ETag на сервер с обновленными данными. Как это говорит вам, что пользователь 2 меняет устаревшую запись? Поскольку каждое изменение в записи обновляет ETag, сохраненный для этой записи. Поэтому, когда пользователь 2 пытается сохранить ETag, который вы отправляете с их изменениями, не будет соответствовать, и Azure сообщит вам, чтобы вы могли справиться с тем, что должно быть сделано.
Теперь, если вам все равно, что пользователь 2 может перезаписать изменения пользователя 1, затем передать "*" с сохранением, а Azure не даст ошибку, если ETag не соответствует.