Lo storage basato su tabelle offerto da Windows Azure è un servizio che ci permette di memorizzare e interrogare in tabelle e colonne attraverso OData, e quindi con chiamate REST supportate da qualsiasi piattaforma.
Dato l'approccio disconnesso, quando recuperiamo un'entità, effettuiamo una modifica e la salviamo, siamo sottoposti a problemi di concorrenza. Altre richieste potrebbero modificare l'entità prima di noi ed è importante considerare anche questa possibilità. Per questo scopo i servizi REST delle table utilizzano l'header ETag che rappresenta un timestamp dell'entità: quanto la leggiamo ci viene restituito l'ETag, quando aggiorniamo o cancelliamo un'entità, passiamo l'ETag di riferimento. Questo permette all'engine server di comparare il timestamp e rifiutare l'operazione qualora il timestamp non coincidesse.
Ci sono situazioni però, in cui vogliamo forzare l'aggiornamento, senza porci il problema di eventuali concorrenze. Per fare questo possiamo passare come ETag il valore asterisco (*). Se utilizziamo le API .NET, per aggiornare o cancellare un'entità, dobbiamo fare l'attach dell'entità specificando, con un overload apposito, l'ETag. Nello snippet seguente è mostrato come fare:
// Ricostruisco l'oggetto
var m = new MyEntity();
m.ID = 2;
m.Name = "Test";
// Inserisco nel contesto l'entità
ctx.AttachTo("Entities", m, "*");
// Marco l'entità come aggiornata
ctx.UpdateObject(m);
// Salvo i cambiamenti
ctx.SaveChanges();Nel caso in cui l'entità sia già presente nel contesto corrente, è sufficiente fare prima il Detach e procedere con il nuovo AttachTo, come nell'esempio precedente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Pubblicare un MCP Server in GitHub MCP Registry
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework
Definire il metodo di rilascio in .NET Aspire
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Scrivere selettori CSS più semplici ed efficienti con :is()
Dallo sviluppo locale ad Azure con .NET Aspire
Integrare LLM alle nostre applicazioni in .NET con MCP
Recuperare le subissue e il loro stato di completamento in GitHub
Gestire gli accessi con Token su Azure Container Registry
Le cron expression di un workflow di GitHub
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Gli oggetti CallOut di Expression Blend 4.0
- Sfruttare una CDN con i bundle di ASP.NET
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Inserire le news di Punto Informatico nel proprio sito


