La simultanéité des exceptions dans le Cadre de l'Entité
-
21-12-2019 - |
Question
Lors de l'appel SaveChanges
/ SaveChangesAsync
dans le Cadre de l'Entité (CF, C#), si un changement de conflit se produit (par exemple, les valeurs a été mis à jour depuis la dernière lecture de truc), alors laquelle de ces deux exceptions DbUpdateConcurrencyException
OU OptimisticConcurrencyException
vais-je attraper?
Et quelle est la différence entre eux?
La solution
DbUpdateConcurrencyException
est une exception levée par DbContext
, c'est donc la seule à attraper.Cette exception peut être causée par une sous-jacent OptimisticConcurrencyException
, mais , dans ce cas, cette exception est enveloppé comme l'intérieur d'exception.
Pas tous les mettre à jour exceptions sont causés par la simultanéité, donc vous devez les attraper DbUpdateException
après attraper DbUpdateConcurrencyException
(parce que ce dernier est un sous-type de DbUpdateException
).
Voir aussi Entity framework 5.0 poignée d'accès concurrentiel optimiste exception?.
Autres conseils
Vous obtiendrez un OptimisticConcurrencyException
.Jetez un oeil à cette.
Maintenant, venir à l'écart.
- OptimisticConcurrencyException:jeté lorsqu'un accès concurrentiel optimiste violation se produit(supposons que plus d'un perople sont en train de changer pour le même résultat,et ce sera la cause de ce problème de ne pas être sychronized)
- DbUpdateConcurrencyException:Exception levée par DbContext lorsque le comportement attendu est que SaveChanges pour une entité qui serait le résultat dans une base de données mise à jour, mais en fait, pas de lignes dans la base de données ont été touchés.Cela montre que la base de données a été mis à jour simultanément et un jeton d'accès concurrentiel qui a été prévu pour correspondre n'a pas fait de match.L'état des entrées référencées par cette exception ne sont pas numérotés en raison de la sécurité et de l'accès à l'état des entrées après la sérialisation de retourner la valeur null.