Вопрос

При вызове SaveChanges / SaveChangesAsync в Entity Framework (CF, C #), если возникает конфликт изменений (например, значения были обновлены с момента последнего чтения thingy), то какое из этих двух исключений DbUpdateConcurrencyException или OptimisticConcurrencyException мне поймать?

И в чем же разница между ними?

Это было полезно?

Решение

DbUpdateConcurrencyException является ли конкретное исключение, генерируемое DbContext, так что это тот, кого нужно поймать.Это исключение может быть вызвано лежащей в основе OptimisticConcurrencyException, но если это так, то это исключение оборачивается как внутреннее исключение.

Не все исключения обновления вызваны параллелизмом, поэтому вам также необходимо перехватить DbUpdateException после ловить DbUpdateConcurrencyException (поскольку последний является подтипом DbUpdateException).

Смотрите также Entity framework 5.0 обрабатывает исключение оптимистичного параллелизма?.

Другие советы

Вы получите генеракодицетагкод.Посмотрите на Это .

теперь приходит к диффриции.

    .
  • optimisticconcurenencyException : брошено, когда происходит оптимистическое нарушение параллелизма (предположим, что больше, чем один перополь меняется на один и тот же результат, и это приведет к тому, что проблема не будет синхронизирована)
  • dbupdateConcurnencyException : исключение, брошенное by dbcontext, когда ожидаемое поведение заключается в том, что Savechanges для объекта приведет к обновлению базы данных, но на самом деле никакие строки в базе данных не были затронуты.Это показывает, что база данных была одновременно обновлена, и ожидаемый токен параллелизма, который, как ожидается, соответствует на самом деле не совпадает.Государственные записи, указанные этим исключением, не являются сериалами из-за безопасности и доступа к государственным записям после того, как сериализация вернет NULL.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top