实体框架:ObjectContext安全性

时间:2013-05-22 07:57:44

标签: sql entity-framework objectcontext

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

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

1 个答案:

答案 0 :(得分:0)

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

如果您遇到一个选择然后更新的情况,那么

线程A选择

线程B选择

线程更新

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

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