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?

È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top