#73 - Abilitare la gestione della concorrenza in Entity Framework
di Marco De Sanctis, in LINQ, Entity Framework, 15 ottobre 2008
Tramite ADO.NET Entity Framework è possibile gestire casi di concorrenza in scrittura direttamente nell'editor del model, impostando l'attributo ConcurrencyMode al valore Fixed per ogni proprietà che si vuole includere nel lock ottimistico. Tale operazione può essere effettuata sia nel designer di Visual Studio, sia agendo direttamente sul codice XML del Conceptual Schema Definition (CSDL):
<Property Name="RagioneSociale" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" ConcurrencyMode="Fixed" />
L'effetto è che, in presenza di Update o Delete, l'engine introdurce ulteriori condizioni di WHERE per verificare che i valori delle proprietà specificate non siano stati modificati da altri utenti, producendo una query simile alla seguente:
update [dbo].[Clienti] set [RagioneSociale] = 'ValoreModificato' where (([Id] = 1) and ([RagioneSociale] = 'ValoreOriginale'))
In presenza di un errore di concorrenza, l'invocazione del metodo SaveChanges dell'ObjectContext fallisce e viene sollevata una OptimisticConcurrencyException.
Abilitare il lock ottimistico per ogni singola proprietà di una entity è però scomodo, poco manutenibile e soggetto ad errori; una best-practice, nel caso si utilizzi Sql Server, è quella di aggiungere alla tabella una colonna di tipo TimeStamp, che viene automaticamente modificata dal server ad ogni operazione di scrittura, e di impostare solo su essa il controllo della concorrenza.
Approfondimenti
-
Usare LINQ to SQL oggi è semplicemente sbagliato
-
#148 - Scoprire le pagine attualmente più richieste su IIS con LINQ e Microsoft.Web.Administration
-
Entity Framework in action è in disponibile in MEAP
-
#100 - Utilizzare il metodo CreateSourceQuery per ottimizzare il recupero dei dati in deferred loading in Entity Framework
-
#118 - Esaminare documenti con namespace con LINQ e XDocument
-
Visto che ultimamente Reflection.Emit è di moda...
-
Real Code Day 4: Web UI: applicazioni con ASP.NET 4.0 e MVC 2.0
-
Basta! Italia 2009 - I'll be there!
-
#137 - Utilizzare i Glyphs per migliorare le performance in WPF
-
#108 - Sfruttare EntitySQL per lanciare una user defined function sul database
-
Oltre il database, da Bing a Twitter: i provider per LINQ per ogni esigenza
-
#155 - Gestire e ottimizzare messaggi di grandi dimensioni in WCF

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.