当在实体框架(CF、C#)中调用SaveChanges
/SaveChangesAsync
时,如果发生更改冲突(例如,自上次读取之后值已更新),那么我应该捕获这两个DbUpdateConcurrencyException
异常中的哪一个?OptimisticConcurrencyException
它们之间有什么区别?
当在实体框架(CF、C#)中调用SaveChanges
/SaveChangesAsync
时,如果发生更改冲突(例如,自上次读取之后值已更新),那么我应该捕获这两个DbUpdateConcurrencyException
异常中的哪一个?OptimisticConcurrencyException
它们之间有什么区别?
DbUpdateConcurrencyException
是由 抛出的特定异常DbContext
,因此这是要捕获的异常。此异常可能是由底层引起的OptimisticConcurrencyException
,但如果是这样,则将此异常包装为内部异常。
并不是所有的更新异常都是并发引起的,所以你也得先抓DbUpdateException
后抓DbUpdateConcurrencyException
(因为后者是 的子类型DbUpdateException
)。
另请参阅实体框架 5.0 处理乐观并发异常?.
你会得到一个OptimisticConcurrencyException
. 看看这个。
现在来看看差异。