Frage

Beim Anrufen SaveChanges / SaveChangesAsync Wenn in Entity Framework (CF, C#) ein Änderungskonflikt auftritt (z. B. wurden die Werte seit dem letzten Lesevorgang aktualisiert), welche dieser beiden Ausnahmen gibt es? DbUpdateConcurrencyException ODER OptimisticConcurrencyException soll ich fangen?

Und was ist der Unterschied zwischen ihnen?

War es hilfreich?

Lösung

DbUpdateConcurrencyException ist eine bestimmte Ausnahme, die von ausgelöst wird DbContext, also ist dies derjenige, den es zu fangen gilt.Diese Ausnahme kann durch einen Basiswert verursacht werden OptimisticConcurrencyException, aber wenn ja, wird diese Ausnahme als innere Ausnahme verpackt.

Da nicht alle Aktualisierungsausnahmen durch Parallelität verursacht werden, müssen Sie sie auch abfangen DbUpdateException nach fangen DbUpdateConcurrencyException (weil Letzteres ein Untertyp von ist DbUpdateException).

Siehe auch Behandelt Entity Framework 5.0 eine optimistische Parallelitätsausnahme?.

Andere Tipps

Sie erhalten eine OptimisticConcurrencyException.Schauen Sie mal vorbei Das.

Kommen wir nun zum Unterschied.

  • OptimisticConcurrencyException:Wird ausgelöst, wenn eine Verletzung der optimistischen Parallelität auftritt (angenommen, mehr als eine Person wechselt zum gleichen Ergebnis, und dies führt zu dem Problem, dass sie nicht synchronisiert werden).
  • DbUpdateConcurrencyException:Von DbContext ausgelöste Ausnahme, wenn das erwartete Verhalten darin besteht, dass SaveChanges für eine Entität zu einer Datenbankaktualisierung führen würde, tatsächlich aber keine Zeilen in der Datenbank betroffen waren.Dies zeigt, dass die Datenbank gleichzeitig aktualisiert wurde und ein Parallelitätstoken, dessen Übereinstimmung erwartet wurde, tatsächlich nicht übereinstimmte.Statuseinträge, auf die sich diese Ausnahme bezieht, werden aus Sicherheitsgründen nicht serialisiert und der Zugriff auf die Statuseinträge nach der Serialisierung gibt Null zurück.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top