我找到了一篇 MSDN 文章,描述了 EF 在保存更改时如何处理并发:
默认情况下 [...] 对象服务将对象更改保存到数据库而不检查并发性。对于可能遇到高度并发的属性,我们建议在概念层中定义实体属性,其属性为 ConcurrencyMode="fixed"
我有两个问题:
在我的模型中没有属性 where
ConcurrencyMode="fixed"
,我可以安全地假设如果OptimisticConcurrencyException
在保存更改时抛出 an ,那是因为实体不再存在于数据存储中,即它已被另一个用户删除,或者我是遗漏了什么?我想 EF 执行一个
UPDATE
看起来像这样的 -statement,在我看来,OptimisticConcurrencyException
如果 ID = 1 的 Person 不存在,只会导致抛出:UPDATE Person SET FirstName = 'John' AND LastName = 'Smith' WHERE ID = 1
使用 时
ConcurrencyMode="fixed"
,EF 在删除实体时是否也会检查并发性?换句话说,EF 是否会执行如下所示的DELETE
- 语句(不仅仅是 - 子句中的主键WHERE
):DELETE FROM Person WHERE ID = 1 AND LastName = 'Doe'