0

我正在开发由 4 个 Web 应用程序和一个 Windows 服务组成的 n 层应用程序,我希望每个 http 请求或每个线程都有一个 ObjectContext 实例。

问题是我是否应该处理在 webapp 和 winservice 中都有 ObjectContext 实例的情况,例如在 webapp 中我正在编辑记录,在 winservice 中我正在删除相同的记录。两个进程是否有可能同时命中 Context.SaveChanges() 以及如果可能会发生什么?

4

1 回答 1

0

如果删除恰好首先发生,则更新将引发异常。否则更新成功,然后删除成功。

如果你有一个情况,你都做了一个选择然后更新,那么

线程 A 选择

线程 B 选择

线程 A 更新

线程 B 更新,但通过异常,因为它检测到记录已更改。

它使用所谓的乐观并发来做到这一点。当线程 b 进行更新时,它在 where 条件中包含它选择的所有值。如果有任何不匹配,则更新不会修改任何记录,EF 将抛出异常。

于 2013-05-22T08:06:18.007 回答