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?

Était-ce utile?

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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top