Eccezioni di concorrenza nel quadro di entità
-
21-12-2019 - |
Domanda
Quando si chiama SaveChanges
/ SaveChangesAsync
in Entity Framework (CF, C #), se si verifica un conflitto di modifica (ad esempio, i valori sono stati aggiornati dall'ultima Leggi Thingy), quale di queste due eccezioni DbUpdateConcurrencyException
o OptimisticConcurrencyException
prenderanno?
E qual è la differenza tra loro?
Soluzione
DbUpdateConcurrencyException
è un'eccezione specifica lanciata da DbContext
, quindi questo è quello da catturare.Questa eccezione può essere causata da un OptimisticConcurrencyException
sottostante, ma se è così, questa eccezione è avvolta come eccezione interna.
Non tutte le eccezioni di aggiornamento sono causate dalla concorrenza, in modo da dover anche catturare DbUpdateException
dopo cattura generando DbUpdateConcurrencyException
(perché quest'ultimo è un sottotipo di DbUpdateException
).
Vedi anche Entity Framework 5.0 Gestire un'eccezione di concorrenza ottimista? .
Altri suggerimenti
Otterrai un OptimisticConcurrencyException
.Dai un'occhiata a .
Ora arrivando alla diffrence.
- .
- OptimisticConcurrencyException : lanciato quando si verifica una violazione di concorrenza ottimistica (supponiamo che più di un tassello stia passando allo stesso risultato, e questo causerà il problema di non essere sychronizzato)
- dbupdateconcurrencyexception : Eccezione lanciata da dbcontext Quando il comportamento previsto è che i salvatori per un'entità comporterebbero un aggiornamento del database ma in realtà nessuna riga nel database è stata influenzata.Ciò dimostra che il database è stato aggiornato contemporaneamente e un token di concorrenza che si aspettava che corrispondano non corrispondeva in realtà.Le voci dello stato referenziate da questa eccezione non sono serializzate a causa della sicurezza e dell'accesso alle voci dello stato dopo che la serializzazione restituirà NULL.