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
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Creazione di componenti personalizzati in React.js con Tailwind CSS
Utilizzare Copilot con Azure Cosmos DB
Eseguire operazioni sui blob con Azure Storage Actions
Effettuare il binding di date in Blazor
Routing statico e PreRendering in una Blazor Web App
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare Azure Cosmos DB con i vettori
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Change tracking e composition in Entity Framework
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online