打电话时 SaveChanges / SaveChangesAsync 在Entity Framework(CF,C#)中,如果发生更改冲突(例如,自上次读取thingy以来,值已更新),那么这两种异常中的哪一种 DbUpdateConcurrencyExceptionOptimisticConcurrencyException 要我接吗?

它们之间有什么区别?

有帮助吗?

解决方案

DbUpdateConcurrencyException 是由抛出的特定异常 DbContext, ,所以这是一个抓住。此异常可能是由底层引起的 OptimisticConcurrencyException, ,但如果是这样,则此异常被包装为内部异常。

并非所有更新异常都是由并发引起的,因此您还必须捕获 DbUpdateException 之后 抓捕,抓捕 DbUpdateConcurrencyException (因为后者是 DbUpdateException).

请参阅 Entity framework5.0处理乐观并发异常?.

其他提示

你会得到一个 OptimisticConcurrencyException.看看 .

现在来讨论一下。

  • OptimisticConcurrencyException:当发生乐观并发冲突时抛出(假设多个perople正在更改为相同的结果,并且这会导致未同步的问题)
  • DbUpdateConcurrencyException:当预期的行为是实体的SaveChanges会导致数据库更新但实际上数据库中没有任何行受到影响时,DbContext引发的异常。这表明数据库已并发更新,预期匹配的并发令牌实际上不匹配。由于安全性原因,此异常引用的状态条目未序列化,序列化后对状态条目的访问将返回null。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top