乐观的并发ADO.NET 实体框架
-
10-07-2019 - |
题
我找到了 MSDN的文章 它描述了如何EF处理并发当保存的变化:
通过默认[...]服务对象节省的对象 变化的数据库 没有 检查并发.对于 性可能会遇到一个 高度的并发,我们 建议该实体的财产 定义在概念层 一个属性 ConcurrencyMode="固定的"
我有两个问题:
有没有属性,在我的模特在哪里
ConcurrencyMode="fixed"
, ,它是安全的我认为,如果没有一个OptimisticConcurrencyException
扔的时候节变化,这是因为该实体不再存在的数据存储,即它已经被删除的另一个用户,还是我失去了一些东西?我想EF执行
UPDATE
-声明,看起来像这样的东西,这正如我所看到的,只会导致OptimisticConcurrencyException
被抛如果该人与ID=1并不存在: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'
解决方案
好的问题。
(1)是的,但不幸的是,它不是这么简单。因为EF(3.5)具有一个独立的关联模式,该协会是独立处理过,而且即使你没说所以它成为的一部分,并发检查期间,更新和删除。
即在更新一个人你会经常看到的更新,这样的:
UPDATE Person SET Partner = NULL AND FirstName = 'John' AND LastName = 'Smith'
WHERE ID = 1 AND Partner = 2
即合作伙伴是一个FK列。
这所有的更改在4.0如果使用FK协会,作为我们预计大多数人。
(2)删除任何ConcurrencyMode='固定的'性质的检查过删除。唯一的例外是当你有一个SPROC于删除,不接受,并发价值。
希望这可以帮助
亚历克斯
不隶属于 StackOverflow