c# - tutorial - mvc 5 with entity framework
Excepciones de concurrencia en Entity Framework (2)
Obtendrá una OptimisticConcurrencyException
. Echa un vistazo a this .
Ahora llegando a la diferencia.
- OptimisticConcurrencyException : se produce cuando se produce una infracción de concurrencia optimista (suponga que más de una persona está cambiando al mismo resultado, y esto causará el problema de no estar sincronizado)
- DbUpdateConcurrencyException : Excepción lanzada por DbContext cuando el comportamiento esperado es que SaveChanges para una entidad resultaría en una actualización de la base de datos pero de hecho no se vieron afectadas filas en la base de datos. Esto muestra que la base de datos se ha actualizado simultáneamente y que un token de concurrencia que se esperaba que coincida no coincide realmente. Las entradas de estado a las que hace referencia esta excepción no se serializan debido a la seguridad y el acceso a las entradas de estado después de la serialización devolverá el valor nulo.
Al llamar a SaveChanges
/ SaveChangesAsync
en Entity Framework (CF, C #), si se produce un conflicto de cambio (por ejemplo, los valores se han actualizado desde la última lectura), ¿cuál de estas dos excepciones DbUpdateConcurrencyException
O OptimisticConcurrencyException
detectaré?
¿Y cuál es la diferencia entre ellos?
DbUpdateConcurrencyException
es una excepción específica lanzada por DbContext
, por lo que esta es la que hay que atrapar. Esta excepción puede ser causada por una excepción OptimisticConcurrencyException
, pero si es así, esta excepción se incluye como la excepción interna.
No todas las excepciones de actualización son causadas por la concurrencia, por lo que también debe capturar la DbUpdateException
después de capturar la DbUpdateConcurrencyException
(porque esta última es un subtipo de la DbUpdateException
).
Véase también Entity Framework 5.0 para manejar la excepción de concurrencia optimista? .