2013-07-03 6 views
13

per ETag in ITableEntity MSDN dice: Ottiene o imposta l'ETag corrente dell'entità. Impostare questo valore su "*" per sovrascrivere ciecamente un'entità come parte di un'operazione di aggiornamento.Qual è lo scopo di ETag in ITableEntity

Non sono in grado di capire lo scopo di questa proprietà, per favore spiegate perché e quando possiamo usare questa proprietà.

risposta

1

La proprietà ETag è la marca temporale delle entità. È possibile leggere la proprietà ETag in ReadingEnitity Event.

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

Per ulteriori dettagli si veda la discussione su questo thread How to use Windows Azure Table Storage Timestamp or Etag field

+5

Al momento ETag detiene il timestamp. Ma non dovresti fare affidamento su questo. Potrebbe cambiare in futuro. L'ETag è usato per gestire la concorrenza ottimistica e di solito non dovrebbe essere usato dal tuo codice. Se è necessario il timestamp di utilizzare la proprietà Timestamp. Per maggiori informazioni su ETag, leggere la sezione Note in msdn: http://msdn.microsoft.com/en-us/library/windowsazure/dd179427 – huha

21

ETag non è il timestamp, o almeno non più. C'è un'altra proprietà Timestamp che è quando il record è stato aggiornato l'ultima volta. L'ETag è usato per la concorrenza. Se si carica un'entità tabella e si desidera aggiornarla, si passa ad aggiornare ETag dal momento in cui è stato caricato il valore e si aggiornerà l'entità solo se ETag corrisponde a ciò che è memorizzato.

Perché ti importa? Bene, se più utenti modificano lo stesso articolo su un modulo contemporaneamente, non si desidera che un utente modifichi per sovrascrivere l'altro utente senza che al secondo utente venga notificato che stanno sovrascrivendo i dati che sono stati modificati dal momento in cui sono stati caricati .

Esempio: utente 1 e utente 2 caricano una pagina di modifica allo stesso tempo. L'utente 1 modifica un valore per il campo 1 e salva l'elemento. Dopo che l'utente 2 ha avuto la voce aperta un po 'più lunga, l'utente 2 apporta una modifica al campo 2 non correlato e inconsapevolmente il campo obsoleto 1 viene salvato con il loro aggiornamento. L'utente 2 non sa che sta scartando un cambiamento da parte dell'utente 1 a meno che non lo dica. Quindi, quello che dovresti fare è mostrare un errore che l'utente 1 ha già cambiato e sono sicuri di voler sovrascrivere le modifiche dell'utente 1 o se vogliono vedere prima quelle modifiche.

Questo viene eseguito sia dall'utente 1 che dall'utente 2 che memorizzano ETag da quando il record è stato caricato nascosto sul display del modulo. Quando ogni utente tenta un salvataggio, è possibile passare tale ETag al server con i dati aggiornati. Come ti dice che l'utente 2 sta cambiando un record non aggiornato? Perché ogni modifica di un record aggiorna l'ETag memorizzato per quel record. Quindi, quando l'utente 2 tenta di salvare l'ETag che invii con le loro modifiche non corrisponderà e Azure ti dirà in modo che tu possa gestire ciò che dovrebbe essere fatto.

Ora se non ti interessa che l'utente 2 possa sovrascrivere le modifiche dell'utente 1, passa "*" con il salvataggio e Azure non darà un errore quando ETag non corrisponde.