2013-07-03 17 views
13

dla ETag w ITableEntity MSDN mówi: Pobiera lub ustawia bieżący ETag jednostki. Ustaw tę wartość na "*", aby ślepo zastąpić encję jako część operacji aktualizacji.Jaki jest cel ETag w ITableEntity

Nie mogę potwierdzić celu tej nieruchomości, wyjaśnij, dlaczego i kiedy możemy korzystać z tej nieruchomości.

Odpowiedz

1

Właściwość ETag to znaczniki czasu jednostek. Możesz przeczytać właściwość ETag w wydaniu ReadingEnitity.

void OnContextReadingEntity(object sender, ReadingWritingEntityEventArgs e) 
{ 
    string eTag = e.Data.FirstAttribute.Value; 
} 

celu uzyskania dalszych informacji proszę zobaczyć dyskusję na wątku How to use Windows Azure Table Storage Timestamp or Etag field

+5

W tym momencie ETag przechowuje znacznik czasu. Ale nie powinieneś polegać na tym. Może się zmienić w przyszłości. ETag jest używany do obsługi optymistycznej współbieżności i zazwyczaj nie powinien być używany z twojego kodu. Jeśli potrzebujesz znacznika czasu, użyj właściwości Znacznik czasu. Więcej informacji o ETag można znaleźć w sekcji Uwagi w msdn: http://msdn.microsoft.com/en-us/library/windowsazure/dd179427 – huha

21

ETag nie jest znacznik czasu, a przynajmniej już nie. Istnieje inna właściwość Timestamp, czyli data ostatniej aktualizacji rekordu. ETag służy do współbieżności. Jeśli załadujesz tabelę i chcesz ją zaktualizować, przekazujesz aktualizację ETag od momentu załadowania wartości, która aktualizuje encję tylko wtedy, gdy ten ETag pasuje do tego, co jest przechowywane.

Dlaczego cię to obchodzi? Jeśli masz wielu użytkowników edytujących ten sam element w formularzu w tym samym czasie, nie chcesz, aby jeden użytkownik zmienił się, aby nadpisał drugiego użytkownika bez powiadomienia drugiego użytkownika o nadpisaniu danych, które zostały zmienione od momentu jego załadowania .

Przykład: użytkownik 1 i użytkownik 2 ładują stronę edycji w tym samym czasie. Użytkownik 1 zmienia wartość dla pola 1 i zapisuje element. Po tym, jak użytkownik 2 otworzył element dłużej, użytkownik 2 wprowadza zmianę do niepowiązanego pola 2 i nieświadomie zapisuje nieaktualne pole 1 wraz z aktualizacją. Użytkownik 2 nie wie, że odrzuca zmianę przez użytkownika 1, chyba że mu o tym powie. Co należy zrobić, to pokazać błąd, który użytkownik 1 zmienił już i czy na pewno chce nadpisać zmiany użytkownika 1 lub czy najpierw chce je zobaczyć.

Dokonuje tego zarówno użytkownik 1, jak i użytkownik 2 przechowujący ETag od momentu załadowania rekordu ukrytego na ekranie formularza. Kiedy każdy użytkownik próbuje zapisać, możesz przekazać ten ETag do serwera ze zaktualizowanymi danymi. Jak to się mówi, że użytkownik 2 zmienia rekord nieaktualny? Ponieważ każda zmiana rekordu powoduje aktualizację pliku ETag zapisanego dla tego rekordu. Tak więc, gdy użytkownik 2 spróbuje zapisać ETag, który wyślesz, jego zmiany nie będą się zgadzać, a Azure powie Ci, że możesz poradzić sobie z tym, co należy zrobić.

Teraz, jeśli nie obchodzi cię, że użytkownik 2 może nadpisać zmiany użytkownika 1, to przekaż "*" przy zapisie, a Azure nie spowoduje błędu, gdy ETag się nie zgadza.