When calling SaveChanges
/ SaveChangesAsync
in Entity Framework (CF, C#), if a change conflict occurs (for example, the values has been updated since last read thingy), then which of these two exceptions DbUpdateConcurrencyException
OR OptimisticConcurrencyException
shall I catch?
And what is the difference between them?
Concurrency exceptions (System. Data. DBConcurrencyException) are raised when two users attempt to change the same data in a database at the same time.
Entity Framework Core provides no support for pessimistic concurrency control.
To resolve optimistic concurrency conflicts, you can take advantage of the Reload method to update the current values in your entity residing in the memory with the recent values in the database. Once reloaded with the updated data, you can attempt to persist your entity again in the database.
DbUpdateConcurrencyException
is a specific exception thrown by DbContext
, so this is the one to catch. This exception may be caused by an underlying OptimisticConcurrencyException
, but if so, this exception is wrapped as the inner exception.
Not all update exceptions are caused by concurrency, so you also have to catch DbUpdateException
after catching DbUpdateConcurrencyException
(because the latter is a subtype of DbUpdateException
).
See also Entity framework 5.0 handle optimistic concurrency exception?.
You will get an OptimisticConcurrencyException
. Have a look at this.
Now coming to the diffrence.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With