-
21-12-2019 - |
题
打电话时 SaveChanges
/ SaveChangesAsync
在Entity Framework(CF,C#)中,如果发生更改冲突(例如,自上次读取thingy以来,值已更新),那么这两种异常中的哪一种 DbUpdateConcurrencyException
或 OptimisticConcurrencyException
要我接吗?
它们之间有什么区别?
解决方案
DbUpdateConcurrencyException
是由抛出的特定异常 DbContext
, ,所以这是一个抓住。此异常可能是由底层引起的 OptimisticConcurrencyException
, ,但如果是这样,则此异常被包装为内部异常。
并非所有更新异常都是由并发引起的,因此您还必须捕获 DbUpdateException
之后 抓捕,抓捕 DbUpdateConcurrencyException
(因为后者是 DbUpdateException
).
其他提示
你会得到一个 OptimisticConcurrencyException
.看看 这.
现在来讨论一下。
- OptimisticConcurrencyException:当发生乐观并发冲突时抛出(假设多个perople正在更改为相同的结果,并且这会导致未同步的问题)
- DbUpdateConcurrencyException:当预期的行为是实体的SaveChanges会导致数据库更新但实际上数据库中没有任何行受到影响时,DbContext引发的异常。这表明数据库已并发更新,预期匹配的并发令牌实际上不匹配。由于安全性原因,此异常引用的状态条目未序列化,序列化后对状态条目的访问将返回null。
不隶属于 StackOverflow